PHPのexec()関数で別のスクリプトを実行する際のエラーについて

このQ&Aのポイント
  • PHPのexec()関数を使用して別のPHPスクリプトを実行しようとすると、エラーが発生します。
  • 開始行にシェバング行を追加すると、実行時エラーが発生します。
  • 問題の原因は、実行するスクリプトのパスが正しく設定されていないことです。
回答を見る
  • ベストアンサー

PHPのexec()関数

phpスクリプトで $command = "./child.php 2>&1"; exec($command, $outstr, $rtn); のような感じで別の phpスクリプトを実行しようとしています。 (child.php は単独では問題なく実行できています) しかし、child.php を 通常の phpファイルのように <?php で開始すると $rtn = 2 で line 1: ?php: No such file or directory というエラーが帰ってきます。 1行目にシェバング行 #!/usr/local/bin/php7.3 を追加すると $rtn = 126 で "/usr/local/bin/php7.3: bad interpreter" のようなエラーになります。 php のパスはサーバーのマニュアルやユーザーページで 確認する限り間違っていないと思います。 (バージョンを外したり、変えたりしてみましたが同じです) どこが間違っているのか、わかる方がいましたら アドバイスをお願い致します。

  • PHP
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • _kappe_
  • ベストアンサー率68% (1522/2216)
回答No.1

そのPHPスクリプトで使われている改行コードを確認してみてください。 Windowsの改行コード(CR+LF)で書かれたスクリプトをUNIX系のプラットフォームで実行しようとするとそのような問題が起きる場合があります。

creative_soso
質問者

お礼

早々にありがとうざいました. ご指摘の通り、改行が CR+LFでしたので LFのみで保存しアップロードしたらエラーは解消しました。 かなりしつこく検索したのに、この情報は見つけられませんでした。 助かりました。 本当にありがとうございました。

その他の回答 (1)

  • asciiz
  • ベストアンサー率70% (6636/9403)
回答No.2

child.php は、PHPスクリプトが書かれているテキストファイルですよね。 テキストファイルは、Linuxの実行可能ファイルではありません。 コマンドラインから*.phpファイルを実行しようとしたときは、関連づけによりphpコマンドにPHPスクリプトファイルが与えられるから、実行できています。 exec() で実行したい場合には、スクリプトファイルでは無く、きちんと「実行ファイル パラメータ」を書かねばなりません。 例えば、 exec('/usr/bin/php child.php', ~ ) のようにしなければならないでしょう。 ※PHPのインストールパスは 「which php」を実行して確認してください。 ※※また、child.php も絶対パス指定した方が良いでしょう。

関連するQ&A

  • php exec関数

    exec関数を使いたいのですが 調べたら例が出てきたのですが $return_data = exec("/usr/local/bin/php ./top.php param1 = 1 m2 = 2"); exec()の中をどう修正していいかわかりません usrtとかユーザ名ですか? localとはlocalhostとかでいいですか? bin/phpってなんですか ぜんぜんわかりません すいません

    • 締切済み
    • PHP
  • apacheでphp、exec、system関数でのsudo実行

    FreeBSD 7.0-STABLE でphpスクリプトを作っています。 apacheは2.0.63、phpはphp-4.4.9です。 apacheの設定 ユーザ、グループは、apache phpは safe_mode = offです。 sudoは apache ALL=(ALL) ALL と設定しています。 apacheを手動で起動 /usr/local/apache2/bin/apachectl start して、下記を実行すると <?PHP $cmd = "echo 'password' | sudo -S ls /root"; exec($cmd, $output); print_r($output); ?> 結果、 Array ( [0] => .cshrc [1] => .history [2] => .k5login [3] => .login [4] => .profile [5] => .ssh ) とうまく実行できるのですが apacheを自動起動した場合、 以下の方法をそれぞれ試しましたが # cp /usr/local/apache2/bin/apachectl /usr/local/etc/rc.d/apache.sh # chmod 0755 /usr/local/etc/rc.d/apache.sh より起動 /etc/rc.local # Start Apache /usr/local/apache2/bin/apachectl start より起動 crontab -e @reboot /usr/local/apache2/bin/apachectl start より起動 いずれも 結果は Array ( ) とうまくいきません。 どなたか原因のわかる方、教えていただけないでしょうか? 宜しくお願いいたします。

  • PHPからexecを使ってGnuPGを実行できない

    GnuPGをPHPからexec関数を使って実行しようとしていますが、exec関数がエラーになって GnuPGが実行されません。 ただしexec関数に渡すコマンドをコマンドラインから直接打ち込むと正常に実行されます。 具体的には $cmd = "/usr/local/bin/gpg --always-trust --batch --no-secmem-warning -e -a -r ユーザー名 ファイル名のフルパス"; $ret = exec( $cmd, $output, $ret_val ); ここで$retにFALSEが、$ret_valには2が返ってきます。 $cmdのコマンドをコマンドラインから実行すると正常に実行されます。 環境 Apache/1.3.27 (Unix) (Red-Hat/Linux) GnuGP 1.4.6 PHP Version 4.3.11(セーフモードはOff) 以上、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPのCLI(コマンドライン)について

    PHPのCLI版について教えていただきたいことがあります。 まず、前提条件として、 OS:Redhat Linux 9.0 PHP:4.4.1 WEB:Apache2.0 MAIL:qmail となっています。 確認事項としてphpのパスを確かめるために、SSHなどのコマンドラインから、 (A)のようにパスを指定して実行した場合、正常に処理できます。 (A) [/ ]# /usr/local/bin/php <?php phpinfo(); ?> 実行→phpinfoの内容が表示される 次に、qmailの転送機能を利用し、受信したメールを自動的に前述の test.phpに渡すとmaillogに以下のようにログが残っています。 delivery 1488: deferral: /bin/sh:  /var/www/sample/test.php:  /usr/local/bin/php :  bad interpreter:  No such file or directory test.phpのパスは正しく設定されており、 [/ ]# /usr/local/bin/php /var/www/sample/test.php とした場合、正しく読み込みます。 また、test.phpの1行目には #!/usr/local/bin/php と記述してあり、もう一台のサーバー(Redhat Linux 2.1AS)では 正しく動いております。 実行できない原因を調べる手段として、 ・この設定を確認 ・このコマンドを実行 など、まず何をチェックすればいいのか 教えていただけると助かります。 以上、よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPのexecで別PHPの実行

    「エックスサーバー」というレンタルサーバーを使用しています。 PHPファイルの中で[exec()]関数を用いて、別ファイルのPHPを実行させたいと考えております。  ・PHPバージョン:5.3.3  ・ドメイン:XXXXX.xsrv.jp 以下の内容(ProgramA)を実行すると、 [exec()]関数で呼び出している処理(ProgramB)が実行されていないように思います。 どのように修正したら、(ProgramB)が実行されるのでしょうか? どうかご教示くださいませ。 ---ProgramA.php (起動する側)---------------------- <?php exec('/usr/bin/php5.3 /home/XXXXX(ユーザー名)/xsrv.jp(ドメイン)/public_html/AAA/BBB/ProgramB.php'); echo "test!"; ?> ※ProgramA.phpを実行すると、ブラウザには「test!」という文字列が表示されます。 ※ProgramA.phpのパーミッションは755に設定されています。 ---ProgramB.php (起動される側)---------------------- <?php echo"HelloWorld"; ?> ※ProgramB.phpのパーミッションは755に設定されています。

    • 締切済み
    • PHP
  • PHPでexecやpassthruすると

    execやpassthruで実行した実行プログラムが終了するまで待たされると思いますが バックグラウンドで実行する方法はあるでしょうか? PHPはその行で止まらずに実行プログラムとは別に以降の行を実行するということです 要するにexecは実行プログラム実行のトリガーをかけるだけにしたいのです もしあったら具体的に数行以下のコードで教えてください よろしくお願いします

    • ベストアンサー
    • PHP
  • phpのshell_exec関数の動作に関する質問です。

    phpのshell_exec関数の動作に関する質問です。 環境はFreeBSD7.1 php5.2.13です。 もともとperlスクリプトtest.cgiがあって、 /path/test.cgi filea fileb (以後これをコマンドラインという) というコマンドラインが正常に実行されることが確認済みです。 このコマンドラインが実行されるとfilebの内容が変化します。 次にphpスクリプトからコマンドラインを実行するために test.phpスクリプトの途中に、 shell_exec("/path/test.cgi $filea $fileb"); と書きました。 (test.cgiではperlライブラリを読み込んでいます。 phpには同等のライブラリがないためにやむを得ずこうしています。) ところがtest.phpを(ブラウザから)実行しても コマンドライン実行後に期待される$filebの変化がありません。 つまりコマンドラインが実行された形跡がないのです。 test.phpスクリプトの$filea, $filebが正しく変数展開されていることは確認済みです。 FireFoxブラウザから見るとtest.phpスクリプトは特にエラーもなく正常に実行されているように見えます。 質問 1 正常に実行できるコマンドラインをphpのshell_exec関数で実行できない理由としてどのようなことが考えられるでしょうか。

    • ベストアンサー
    • PHP
  • PHPのpostgreSqlの関数???

    Postgresqlへのパスは下記のとおり通っています。 fumi@tsl fumi]$ echo $PATH /usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/pgsql/bin:/home/fumi/bin PHPを起動したら下記のエラーが出るのは何故でしょうか?どうすれはpostgresqlの関数をPHPで使えるようになりますか? Fatal error: Call to undefined function: pg_connect() in /home/fumi/www/pgimage-1.2/init.inc on line 54 よきアドバイスお願いいたします。

    • 締切済み
    • PHP
  • IISでPHP使うにはどう設定したらいいですか?

    IIS+CGI(Perl)の場合は実行ファイルのある場所を/usr/local/bin/などとファイルの最初に指定するのはわかります。 しかしIIS+PHPで実行ファイルのある場所を指定するときはどうやったらいいのかわかりません。ApacheだとScriptのエイリアスで設定するみたいですが私にはよく分かりません。 どなたか回答をお願いいたします。

  • crontabでPHPスクリプトが実行出来ない

    crontabで毎分PHPのスクリプトを起動する記述をしましたが、すべて下記エラーが出て実行されません。 phpスクリプトの先頭で「#!bin/usr/php」を書く方法と、crontabで「* * * * * /usr/bin/php test.php > dev/null」とする方法を試してみましたが両方ともダメでした。 解決索があればご教示下さい。 【エラー内容】 test.php: line 1: ?php: No such file or directory

    • ベストアンサー
    • PHP

専門家に質問してみよう