【发布时间】:2013-03-18 13:41:50
【问题描述】:
我有一个从供应商合作伙伴处导入数据的 PHP 脚本。它需要做的一件事是通过 shell_exec() 调用另一个脚本,然后处理图像文件并将其上传到 Amazon S3 存储桶。我现在正在终端中查看此脚本的输出,过了一会儿,我看到了一系列消息:
Warning: shell_exec(): Unable to execute 'php -f /path/to/second/script.php /path/to/image/to/process.jpg' in /path/to/this/script.php on line 453
奇怪的是,这个脚本在这个脚本中被多次调用,并且开始工作,然后停止。它也可以从其他脚本中调用,并且在这些脚本中运行良好。当我复制它无法运行的命令并将其粘贴到自己身上时,它总是有效的。显然 PHP 有时能够运行它。
我在每行运行时都放置了内存使用回显,我发现它正常工作时高达 148MB,出错时低至 77MB。 (这是在主脚本中,而不是无法运行的辅助脚本)。随着错误开始出现,内存使用率似乎越来越低。我第一次注意到它是 88MB 左右,然后下降到 85MB、81MB 和 77MB。
我不清楚是什么原因导致脚本有时可以工作,有时不能。上次我检查 PHP 无法决定它是否可以被打扰,并且它不会被磨损,那么为什么它可以正常工作很长时间(我说的是数百个,如果不是数千个成功的话下载)然后突然停止工作。并不是说它正在尝试处理无法下载的图像,因为脚本中有一个条件阻止了这种情况,我经常看到image does not exist 的负载,即使它无法处理其余部分。我最终不得不编写另一个脚本来运行并在之后再次处理所有丢失的图像。
任何想法都会非常感激!
顺便说一下,这是在一个带有 Amazon Linux 操作系统的大型 AWS EC2 实例上运行的。我们正在运行 PHP5.3
【问题讨论】:
-
顺便说一句,我尝试将命令更改为
/usr/bin/php -f /path/to/second/script.php /path/to/image/to/process.jpg,这也适用于 CLI,但脚本仍然存在同样的问题。 PHP 安全模式已关闭 -
这个问题你解决了吗?我在 Amazon centos 7 上也有这个问题。
-
嗨@Silko。我从来没有,没有。我在发帖几个月后就离开了这个职位,所以从那以后对我来说就不是问题了:)
-
我解决了我的问题。我发现我在 shell_exec 中使用的参数中有一些不允许的字符(如 +、/)。当使用这些字符时,shell_exec 失败。也许这会对某人有所帮助:)
-
很高兴知道。我认为我们的情况并非如此,因为运行命令手动对其进行排序,但我确信这对某些人仍然有用
标签: php linux shell-exec