【问题标题】:exec() function within Laravel works wrong, in tinker and console properlyLaravel 中的 exec() 函数在修补程序和控制台中正常工作
【发布时间】:2019-07-08 10:33:36
【问题描述】:

我对 Laravel 应用程序中的 exec 函数有一个奇怪的问题。使用 imagemagick 库,我必须合并两个 pdf 文件 - 相同的 shell 命令在终端中正常工作, exec() 与 tinker 中的此命令也可以正常工作。但是,当从 Laravel 应用程序中的作业或控制器调用时,它看起来根本看不到原始文件。可能是什么原因?所有文件都存储在生成的存储子文件夹中。

  • 在修补程序中正常工作
  • 在终端中正常工作
  • 在 Laravel 应用程序外部的简单测试 php 文件中正常工作
  • 在 Laravel 应用程序中的作业/控制器中不起作用(看起来它没有读取输入 file_1.pdf(输出文件仅使用覆盖文件生成,没有源“背景”) 已经尝试过 Process::class , exec 用于简化代码。权限设置正确。
exec('convert "/Users/robert/Sites/start-app/storage/documents/file_1.pdf" null: "/Users/robert/Sites/start-app/storage/documents/stamps/1.png" -gravity SouthEast -geometry +150+150 -compose over -layers composite "/Users/robert/Sites/start-app/storage/documents/processed/output_file_1.pdf"');

【问题讨论】:

  • 如果您使用 PHP 中可用的类,它是否有效? php.net/manual/en/book.imagick.php
  • 我还没有使用包装器对其进行测试,只想进行简单的命令行操作并且不敢相信 exec() 中的相同命令在修补程序、控制台中的行为方式不同并在 Laravel 应用程序中。我会检查它,也许它有帮助 - 感谢您的建议。
  • 应用程序是否有权访问该文件?当您使用其他方法时,它们都会像您一样运行。 Laravel 将以运行 Web 服务的帐户运行命令。因此,在运行 apache 的 Ubuntu 上,您需要检查 www-data 是否可以访问这些文件。

标签: laravel imagemagick


【解决方案1】:

您是否有不同的 php.ini 文件来处理 Web 请求和处理 cli?这些通常存储在以下(或类似)文件夹中

/etc/php/7.3/cli/php.ini
/etc/php/7.3/fpm/php.ini

您还可以通过在 cli 和网络请求中运行 phpinfo() 来检查这一点,并比较两者。

如果是这种情况,您应该查看disable_functions 选项。更多信息可以在here找到。请记住之后重新启动您的网络服务器,以便更改生效。

【讨论】:

    【解决方案2】:

    我终于找到了解决方案。该问题是由 GhostScript 的路径引起的,即使 imagemagick 和 gs 在同一路径中,由于某种原因,当从应用程序中通过 exec() 执行时,找不到 gs 命令。 以防万一有人遇到类似问题,这里是解决方案:

    exec('export PATH=/usr/local/bin:$PATH; convert "/Users/robert/Sites/start-app/storage/documents/file_1.pdf" null: "/Users/robert/Sites/start-app/storage/documents/stamps/1.png" -gravity SouthEast -geometry +150+150 -compose over -layers composite "/Users/robert/Sites/start-app/storage/documents/processed/output_file_1.pdf"');
    

    添加导出路径使其正常工作。

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 2012-12-03
      • 2018-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多