我正在构建一个网络应用程序,用户可以在其中动态地从网络浏览器上传 Controller php 文件。这一切都存在问题。
由于每个类都应该被编译以便在 laravel 内部使用,因此必须执行命令 composer dump-autoload
。但我不想从终端手动执行此操作。在“注册类”中,我明确调用了一些对我不起作用的命令,例如:
Artisan::call('dump-autoload');
exec("/path/to/app/composer dump-autoload");
shell_exec('php artisan dump-autoload');
shell_exec('composer dump-autoload');
仍未找到新的 Controller 。所以,我不知道我错过了什么。或者是否有另一种方法可以动态“加载”我的类。
需要考虑的事项:
- 安全隐患:当然,但我的问题是广泛开放的,可以在执行时动态识别新类
- 我完全确定路径,我已经从 Linux 终端测试了每一个问题,并且一切正常(使用绝对和相对路径)。由于这些原因,我寻找其他原因而不是路径。
不要忘记在编译后实际“要求”或“包含”该类
当然,该文件已包含并由第 2 点确认。这看起来很可疑:
my off-the-cuff guess would be that the user running php doesn't have sufficient privileges to perform the operation or write to the required directories
但是,php怎么可能没有足够的权限,会不会影响了
composer dump-autoclass
命令?Apache/2.4.9 (Fedora) PHP/5.5.12
最佳答案
要解决这个问题,您可以这样做:
exec("composer dump-autoload -d /path/to/laravel-project/");
您必须明确告诉 Composer 在哪里寻找 composer.json
。
-d
如果指定使用给定目录作为工作目录
没有 -d
选项,composer 假设你的 composer.json
位于 path/to/laravel-project/public/
中。因为所有请求都被路由到前端 Controller index.php
并且这意味着当前工作目录是 public/
关于php - 来自 php 的 dump-autoload 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23704140/