команда dump-autoload от php

Я создаю веб-приложение, где пользователь динамически может загружать файлы php контроллеров из веб-браузера. Во всем этом есть проблема.

Поскольку каждый класс должен быть скомпилирован для использования внутри laravel, должен быть выполнен компилятор composer dump-autoload autoload. Но я не хочу делать это вручную с терминала. Внутри «класса регистра» я вызывал явно некоторые команды, которые не работали для меня, например:

  • Artisan::call('dump-autoload');
  • exec("/path/to/app/composer dump-autoload");
  • shell_exec('php artisan dump-autoload');
  • shell_exec('composer dump-autoload');

Новые контроллеры все еще не найдены. Итак, я не знаю, чего мне не хватает. Или если есть еще один способ «загрузить» мои классы динамически.

Что нужно учитывать:

  1. Последствия для безопасности: конечно, но мой вопрос широко открыт для динамического распознавания новых классов во время выполнения
  2. Я полностью уверен в путях, я тестировал каждую проблему с терминала linux, и все работало нормально (с абсолютным и относительным путем). По этим причинам я ищу другую причину вместо путей.
  3. Don't forget to actually 'require' or 'include' the class after you compile it Конечно, файл включен и подтвержден точкой 2.
  4. Это выглядит подозрительно:

    у меня не было уверенности в том, что пользователь, на котором запущен php, не имеет достаточных привилегий для выполнения операции или записи в требуемые каталоги

    Однако, как могло быть возможно, что php не имеет достаточных привилегий, может ли это composer dump-autoclass команду composer dump-autoclass ?

  5. Apache / 2.4.9 (Fedora) PHP / 5.5.12

Хорошо, чтобы это сделать, вы можете сделать это:

 exec("composer dump-autoload -d /path/to/laravel-project/"); 

Вы должны явно сказать композитору, где искать composer.json .

-d Если указано, используйте данный каталог как рабочий каталог

Без опции -d композитор предполагает, что ваш composer.json живет в path/to/laravel-project/public/ . Поскольку все запросы перенаправляются на передний контроллер index.php и это означает, что текущий рабочий каталог является public/

Здесь не достаточно информации, чтобы помочь нам помочь вам.

Что нужно учитывать:

  • просто хочу упомянуть ужасные последствия для безопасности
  • Я не буду решать проблемы с контентом, просто убедитесь, что они полные и абсолютные
  • у меня не было уверенности в том, что пользователь, на котором запущен php, не имеет достаточных привилегий для выполнения операции или записи в требуемые каталоги
  • не забывайте фактически «требовать» или «включать» класс после его компиляции
  • убедитесь, что ваш автозагрузчик на самом деле стреляет, может быть, с некоторыми протоколами или тому подобное
  • убедитесь, что у вас нет безопасного режима php, и что вы перемещаете загруженный файл, прежде чем выполнять какую-либо работу над ним

Попробуйте обновить свой вопрос с дополнительной информацией, если вы можете понравиться.