PHP execからシェルコマンドを実行できませんが、シェルでユーザーとして実行できますか?

Orangeman555:

私は専用サーバーで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変数を改ざんしようとしました...私は本当にここで暗闇の中にいます。専用サーバーではなく、ローカルホストで動作します。


私はこれを賞金で更新しました-それは開発における深刻な問題です。

専用サーバーを使用していますが、問題は上記のとおりです。


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

gcb:

ですから、今のところphpの問題はありませんが、perlの問題です。インクルードパスが不正です。

ここで答えhttp://u88.n24.queensu.ca/exiftool/forum/index.php?topic=2217.0

You either have to install the ExifTool libraries in the
standard location (ie. somewhere in the @INC directories
listed in your post), or add the location to the include path,
something like this:

Code:
#!/usr/bin/perl
BEGIN { unshift @INC, "PATH_TO_DIRECTORY_CONTAINING_LIBRARIES" }
use Image::ExifTool;

You should be able to add "Image/ExifTool.pm" to the path you add
to find the ExifTool module.

- Phil

前の回答からの提案#3を使用することでまだ解決すると思います。そうではなく、本当に理由を知りたい場合は、内容を出力するだけの新しいperlスクリプトを作成@INCし、シェルとphpを介して実行します。あなたは違いを見るでしょう、そしてあなたはどのログインスクリプトがphpで尊重されていないかを見つけ、それをshell_exec尊重ないためにphpに対するバグを開く必要があります...

ただし、(説明にあまり興味がないように見えないので)問題を簡単に解決するには、スクリプトを呼び出す前にPERLLIB変数を設定するだけです。

だから、ただやる:

  1. find / -name ExifTool.pmこれにより、libがインストールされている場所がわかります。これが戻るとしましょう/example/perl/Image/ExifTool.pm
  2. PERL5LIB=/example/perl/exec()呼び出しに追加します。
  3. exec( "PERL5LIB = / example / perl / sudo /var/www/myscript/execscript.sh {$ param}");

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

PHPコードでシェル(which)コマンドを実行できません

分類Dev

PHPからシェルスクリプトを実行できません。戻りコード126

分類Dev

rootユーザーとしてphpからシェルスクリプトを実行しますか?

分類Dev

コマンドが同期していません。現在、このコマンドを実行することはできません。PHPのWhileループ

分類Dev

コンパイルマシンでphpをビルドし、alpineで実行できませんでした

分類Dev

PHPコードからmysqlストアドプロシージャを実行できません

分類Dev

PHP execからコマンドを実行すると、シェルとは異なる結果が表示されます

分類Dev

環境変数を使用すると、コマンドラインからphpを実行できません

分類Dev

シェルスクリプトはphpから実行されましたが、shスクリプトのコマンドは実行されません

分類Dev

PHPでシェルスクリプトを別のユーザーとして実行できるようにする

分類Dev

PHPからRscriptを実行することはできませんが、ターミナルからは完全に実行されます

分類Dev

php-shell_execを使用してシェルコマンドを実行する

分類Dev

Dockerコンテナを実行しているユーザーがアクセスできないphpファイルでコンテナをビルドしますか?

分類Dev

$ _GET ['request']を使用してPHPシェルコマンドを実行します

分類Dev

PHPはコマンドラインからメールを送信できますが、ブラウザからは送信できません

分類Dev

phpファイルの内容をbashで実行しましたが、いくつかのコマンドを実行できますか?

分類Dev

PHP shell_exec()を使用してtelnetコマンドを実行できません

分類Dev

PHPのexec()関数をWindowsサーバーで実行すると、ASCII制御文字がシェルに渡されますか?

分類Dev

PHPファイルは連続出力でシェルコマンドを実行します

分類Dev

php execメソッドからJavaクラスファイルを実行できませんか?

分類Dev

xdebugセッションでコードをステップスルーしながら任意のphpコードを実行することは可能ですか?

分類Dev

PHPでMosquittoコマンドを実行できません

分類Dev

AngularJSでMySQLを実行しているPHPサーバーからデータをフェッチするときにエラーが発生しました

分類Dev

窓 | ワンプ | php exec()からplink.exeを実行できません

分類Dev

Apacheを使用してphpを介してシェルスクリプトを実行すると、現在のユーザーとenvユーザーが一致しません

分類Dev

Dockerコンテナでlaravelを実行しているときにautoload.phpが見つかりません

分類Dev

これらのコマンドを実行してApacheをphpでセットアップしたため、PHPをApacheで実行できません

分類Dev

HTMLでphpファイルを実行したとき、期待した結果コードが実際に表示されませんでした

分類Dev

スクリプトはターミナルで実行できますが、PHPを使用している場合は実行できません

Related 関連記事

  1. 1

    PHPコードでシェル(which)コマンドを実行できません

  2. 2

    PHPからシェルスクリプトを実行できません。戻りコード126

  3. 3

    rootユーザーとしてphpからシェルスクリプトを実行しますか?

  4. 4

    コマンドが同期していません。現在、このコマンドを実行することはできません。PHPのWhileループ

  5. 5

    コンパイルマシンでphpをビルドし、alpineで実行できませんでした

  6. 6

    PHPコードからmysqlストアドプロシージャを実行できません

  7. 7

    PHP execからコマンドを実行すると、シェルとは異なる結果が表示されます

  8. 8

    環境変数を使用すると、コマンドラインからphpを実行できません

  9. 9

    シェルスクリプトはphpから実行されましたが、shスクリプトのコマンドは実行されません

  10. 10

    PHPでシェルスクリプトを別のユーザーとして実行できるようにする

  11. 11

    PHPからRscriptを実行することはできませんが、ターミナルからは完全に実行されます

  12. 12

    php-shell_execを使用してシェルコマンドを実行する

  13. 13

    Dockerコンテナを実行しているユーザーがアクセスできないphpファイルでコンテナをビルドしますか?

  14. 14

    $ _GET ['request']を使用してPHPシェルコマンドを実行します

  15. 15

    PHPはコマンドラインからメールを送信できますが、ブラウザからは送信できません

  16. 16

    phpファイルの内容をbashで実行しましたが、いくつかのコマンドを実行できますか?

  17. 17

    PHP shell_exec()を使用してtelnetコマンドを実行できません

  18. 18

    PHPのexec()関数をWindowsサーバーで実行すると、ASCII制御文字がシェルに渡されますか?

  19. 19

    PHPファイルは連続出力でシェルコマンドを実行します

  20. 20

    php execメソッドからJavaクラスファイルを実行できませんか?

  21. 21

    xdebugセッションでコードをステップスルーしながら任意のphpコードを実行することは可能ですか?

  22. 22

    PHPでMosquittoコマンドを実行できません

  23. 23

    AngularJSでMySQLを実行しているPHPサーバーからデータをフェッチするときにエラーが発生しました

  24. 24

    窓 | ワンプ | php exec()からplink.exeを実行できません

  25. 25

    Apacheを使用してphpを介してシェルスクリプトを実行すると、現在のユーザーとenvユーザーが一致しません

  26. 26

    Dockerコンテナでlaravelを実行しているときにautoload.phpが見つかりません

  27. 27

    これらのコマンドを実行してApacheをphpでセットアップしたため、PHPをApacheで実行できません

  28. 28

    HTMLでphpファイルを実行したとき、期待した結果コードが実際に表示されませんでした

  29. 29

    スクリプトはターミナルで実行できますが、PHPを使用している場合は実行できません

ホットタグ

アーカイブ