来自php的dump-autoload命令

时间:2014-05-16 20:36:18

标签: php linux laravel-4 composer-php

我正在构建一个Web应用程序,用户可以动态地从Web浏览器上传Controllers 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');

仍未找到新控制器。所以,我不知道我错过了什么。或者,如果有另一种方式来加载"我的课程动态。

需要考虑的事项:

  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命令?

  5. Apache / 2.4.9(Fedora)PHP / 5.5.12

2 个答案:

答案 0 :(得分:3)

要解决这个问题,你可以这样做:

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

你必须明确告诉作曲家在哪里寻找composer.json

-d如果指定,则使用给定目录作为工作目录

如果没有-d选项,则编辑会假定您的composer.json位于path/to/laravel-project/public/。因为所有请求都路由到前端控制器index.php,因此当前工作目录为public/

答案 1 :(得分:2)

这里没有足够的信息来帮助我们。

需要考虑的事项:

  • 只想提及可怕的安全隐患
  • 我不会解决路径问题,只是确保它们是完整且绝对的
  • 我的袖口猜测是运行php的用户没有足够的权限来执行操作或写入所需的目录
  • 编译后不要忘记实际上“要求”或“包含”该课程
  • 确保您的自动加载器实际正在触发,可能还有一些日志记录或类似情况
  • 确保您没有启用php安全模式,并且在对其进行任何操作之前移动上传的文件

如果可以,请尝试使用其他信息更新您的问题。