【问题标题】:dump-autoload command from php来自 php 的转储自动加载命令
【发布时间】:2014-05-18 15:46:10
【问题描述】:

我正在构建一个 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

【问题讨论】:

  • 您确定您的作曲家知道在哪里可以找到这些上传的课程吗?假设您已将该文件夹添加到您的作曲家类映射中?
  • 是的,完全确定。为什么? 1. 因为类被放在 /app/controllers 文件夹中。 2. 因为如果我直接从终端执行composer dump-autoload,类会按照我的预期加载到我的应用程序中
  • "但是,php 没有足够的权限这一事实怎么可能,它会影响 composer dump-autoclass 命令吗?" -- 因为如果进程无法将编译后的文件写入目录,结果就好像你没有运行命令

标签: php linux laravel-4 composer-php


【解决方案1】:

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

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

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

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

如果没有-d 选项,composer 会假定您的composer.json 存在于path/to/laravel-project/public/。因为所有请求都被路由到前端控制器index.php,也就是说当前工作目录是public/

【讨论】:

  • 至少对我不起作用。我怀疑这个问题可能是一个 linux 安全规则。我没有别的解释
  • 尝试使用passthru 而不是exec,结果如何?
  • 在一个只有这一行的简单 php 中,输出是一个零长度的字符串
  • var_dump(passthru("composer dump-autoload -d /var/www/html/Laravel/"));。抱歉,这会返回 null
  • @manix 如果添加了无效的目录路径,它实际上返回NULL,但如果路径有效,我得到Generating autoload files。重新检查您的绝对目录路径是Laravel 还是laravel
【解决方案2】:

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

需要考虑的事项:

  • 只想提一下可怕的安全隐患
  • 我不会解决路径问题,只要确保它们是完整和绝对的
  • 我的即兴猜测是运行 php 的用户没有足够的权限来执行操作或写入所需的目录
  • 不要忘记在编译后实际“要求”或“包含”该类
  • 确保您的自动装弹机确实在启动,可能带有一些日志记录等
  • 确保您没有启用 php 安全模式,并在对上传的文件进行任何操作之前移动它

如果可以,请尝试使用一些额外信息更新您的问题。

【讨论】:

  • 我已经更新了这个问题。如果需要更多信息,请告诉我。
猜你喜欢
  • 2015-04-06
  • 2018-05-18
  • 2012-10-22
  • 1970-01-01
  • 2013-11-25
  • 2014-04-13
  • 2015-10-08
  • 1970-01-01
相关资源
最近更新 更多