我正在尝试让 exiftool 在我的专用服务器上工作。问题是 PHP exec 的运行似乎与以用户身份运行命令时不同。奇怪的是,PHP 显示为我登录时使用的同一用户,但它与系统命令的行为不同。
奇怪的是,一切都在我的本地主机上运行良好,但在我的服务器上却不行。
如前所述,运行通过 ssh 登录的 exiftool 命令是可以的。
但是在一个 php 测试脚本中运行(注意我已经在每个测试目录上安装了 exiftool,它通过 ssh 运行),没有任何东西可以访问,尽管它以用户 orangeman 运行......
它失败了
这是一个更新- 一整天都在做这个:
在外壳上:
-bash-4.1$ which exiftool -a
~/perl5/bin/exiftool
/usr/bin/exiftool
~/perl5/bin/exiftool
在 PHP 中shell_exec('exiftool -a');
/usr/bin/exiftool
这是该文件链接到的内容:
lrwxrwxrwx 1 root root 33 May 15 02:10 exiftool -> /home/orangeman/perl5/bin/exiftool
我也尝试过创建各种符号链接,通过putenv();
在 php 中篡改主要的 $PATH 变量......我在这里真的很黑暗。在本地主机上工作,而不是在专用服务器上。
我已经用赏金更新了这个 - 这是开发中的一个严重问题。
我在专用服务器上,问题如上所述。
更新 根据@gcb 的建议,我能够打印出当 php 的 exec() 函数运行系统命令但没有效果时发生的错误。
PHP
<?php
exec('exiftool 2>&1', $output, $r);
var_dump($output, $r);
?>
输出:
array(2) {
[0]=>
string(230) "Can't locate Image/ExifTool.pm in @INC (@INC contains: /bin/lib /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /bin/exiftool line 33."
[1]=>
string(59) "BEGIN failed--compilation aborted at /bin/exiftool line 33."
}
更新
@gcb 的解决方案有效。非常感谢你。