専用サーバーで 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
また、さまざまな種類のシンボリックリンクを作成して、php を介してメインの $PATH 変数を改ざんしようとしましたputenv();
...私は本当にここで暗闇の中にいます。専用サーバーではなく、ローカルホストで動作します。
私はこれを報奨金で更新しました - これは開発における深刻な問題です。
私は専用サーバーを使用していますが、問題は上記のとおりです。
更新 @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のソリューションが機能しました。どうもありがとうございました。