4

専用サーバーで 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のソリューションが機能しました。どうもありがとうございました。

4

4 に答える 4