PHPのCLI(コマンドライン)について

このQ&Aのポイント
  • PHPのCLI版について教えていただきたいことがあります。Redhat Linux 9.0、PHP 4.4.1、Apache2.0、qmailを使用しています。
  • SSHやコマンドラインからphpのパスを確認するための方法が知りたいです。また、qmailの転送機能を利用して受信したメールを自動的にtest.phpに渡す際にエラーが発生しています。
  • test.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
  • 回答数1
  • ありがとう数2

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

  • ベストアンサー
  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.1

> 次に、qmailの転送機能を利用し、受信したメールを自動的に前述のtest.phpに渡す は具体的にどう行っているのでしょう? 通常(というか私なら) .qmailに |/var/www/sample/test.php /Maildir/ と記述しますが、その場合ちゃんと転送先のユーザーに、PHPの実行権があるでしょうか? 内容を拝見するに、rootでしか確認してないように思えます。 test.phpのパーミッションを確認してみてください。 また、Windowsで作成したプログラムをとLinuxにFTP何かで送ると、改行コードがの違いにより、こういったエラーが起こる場合があります。 改行コードがちゃんとLFになっているか確認してみてください。

projectmanager
質問者

お礼

kusukusu様のおかげで解決いたしました。 原因ですが、まず、アップロードしたtest.phpの バージョンが1世代前のバージョンで、処理が正しく 行われていませんでした。 sampleアカウントのユーザーが.qmail-sampleを作成しただけで、実際のアカウントが作成されていませんでした。そのためPHPを実行できていなかったのだと思います。 パーミッションは755になっていたので、こちらは問題 ないと思います。 以上、アドバイスありがとうございました。

関連するQ&A

  • qmail Part2

    /var/qmail/rc の中身を ./Maildir に変更しました。 #/var/qmail/bin/maildirmake /etc/skel/Maildir を実行して #useradd user00 を作成し中身を確認すると /home/user00/Maildir /home/user00/.qmail は正常に作成されておりました。 #/var/qmail/rc & を実行すると 「1」 685 #PATH=/var/qmail/bin:/bin:/sbin:/usr/bin:/var/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin/X11:/usr/X11R6/bin と出ます。(これって動いていないんですよね?) BINDは動作している様子です。

  • PEARコマンドが使えない・・・

    PEARコマンドが使えなくて困ってます・・・助けて下さい! pear list / pear install *** などのコマンドを打つと -bash: pear: command not found となってしまい、コマンドがないと言われてしまいます。 パスが通ってないのかと思い。 以下のようにパスを通したのですが、変わりませんでした。 echo PATH=$PATH:/usr/bin/PEAR >> .bashrc ; source .bashrc witch pear を実行すると、 /usr/bin/which: no pear in (***/***/sbin:/root/bin:/usr/bin/PEAR) となります。 phpinfoでは、 Configure Command '--without-pear' include_path .:/usr/bin/PEAR となっていますが、このConfigureのwithoutが関係しているのでしょうか? どなたか宜しくお願いします! ------- CentOS 5.1 PHP 5.1.6

    • ベストアンサー
    • PHP
  • Linuxコマンドのパス取得方法

    すいません、どなたかお分かりの方おられましたらアドバイスいただけましたら助かります。 PHPからLinuxコマンドのwgetとlhaコマンドを実行しています。 しかし、実行するサーバーによってコマンドパスが違うので whereisでパスを取得してからPHPで実行するようにしています。 しかし、CRONで実行したときにだけ、そのパスが取得できない状態です。 こういった場合、どのようにしたらパスが取得できるでしょうか。。 環境:さくらインターネットビジネスプロ FreeBSD 7.1-RELEASE-p15 whereis wgetを コンソールで実行した場合 ⇒ wget: /usr/local/bin/wget /usr/local/man/man1/wget.1.gz CRONで実行した場合 ⇒ wget: /usr/local/man/man1/wget.1.gz whereis lhaを コンソールで実行した場合 ⇒ lha: /usr/local/bin/lha CRONで実行した場合 ⇒ lha: よろしくお願いしますm(_ _)m

  • PHPをバージョンアップしたらCRONが動かない

    CentOSとPHPをバージョンアップしたら、CRONだけが動かなくなってしまいました。 PATH関係が変わったことが問題のような検討がつくのですが、いろいろ試してもうまくいきません。どのように解決したら良いか教えていただければと思います。 [バージョンアップ内容] CentOSを5.3から5.7にバージョンアップ PHPを5.1.6から5.3.3にバージョンアップ phpMyAdmin3.4.8をインストール MySQL 5.0.77(バージョンアップせず) バージョンアップ前には ・PHPからMySQLにデータを登録するプログラムは動作していた。(ウェブサイト形式で動作確認) ・上記のプログラムはCRONで動いていた。(CRONでも動作確認) PHP5.1.6の時はCRONに下記のように登録していました。 10 * * * * /usr/bin/php /var/cron_file/test_cron.php アップデート後にウェブサイト形式でプログラムが動くことを確認しました(ページを開くと下記のプログラムが動作し、データをMySQLに登録) phpMyAdminも問題なく動きます。 CRONの問題点を探し出すために下記のことを行いました。 CRONのステータスを確認 # /etc/rc.d/init.d/crond status crond (pid 32151) を実行中... CRONをリスタート # /etc/init.d/crond restart crond を停止中: [ OK ] crond を起動中: CRONのエラーの確認 # vi /var/log/cron PHPの場所の確認 # find / -name php /usr/share/php /usr/include/php /usr/bin/php /usr/lib64/php /var/lib/php どれがPHPの場所なのかがわからないので、とりあえず5.1.6の時に指定していた「/usr/bin/php」を採用 このあたりはネットで情報を探して、登録してみたので正しいのかどうかよくわかりません。↓ PATHの記入 (その1) # vi /root/.bash_profile PATH=$PATH:/sbin:/usr/sbin:/bin:/usr/bin export PATH (その2) #vi /etc/profile PATH=$PATH:/sbin:/usr/sbin:/bin:/usr/bin export PATH PATHの確認 # env | grep PATH PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/bin:/usr/bin:/usr/bin/php (上記以外にもいろいろいじっていたら、このようになってしまいました。上記以外のところでどこで設定したかがわからないので、PATHを消す方法も教えていただければと思います) 「/usr/kerberos/sbin:/usr/kerberos/bin」はもともとシステムで登録されていたもので、上記で登録した「/sbin:/usr/sbin:/bin:/usr/bin」以外のもの「/usr/bin/php」などはどこで登録したかわからなくなってしまったものです。 CRONでPATHを指定する部分でPHPのバージョンによりPATHの値が異なるという情報を見つける /usr/bin/php /usr/bin/php5 /usr/bin/php53 各パターンで 「10 * * * * /usr/bin/●● /var/cron_file/test_cron.php」 をcrontab -eに登録してエラーを見てみる。 (1)「*/1 * * * * /usr/bin/php /var/cron_file/test_cron.php」 # vi /var/log/cron →エラーに何も表示されない (2)「*/1 * * * * /usr/bin/php5 /var/cron_file/test_cron.php」 → エラーに何も表示されない。 (3)「*/1 * * * * /usr/bin/php53 /var/cron_file/test_cron.php」 →エラーが表示される Dec 16 20:20:01 ドメイン crond[11412]: (root) CMD (/usr/bin/php5 /var/cron_file/test_cron.php) クローン自体は動いていて、エラーがでているような感じは把握できたのですがここで行き詰まりました。 PHPのパス関係か、MySQLのパス関係、PHPとMySQLの連係、そのあたりのどこかが原因なのでしょうか? 参考資料としてphpinfo()の情報を記載します。 Loaded Configuration File  /etc/php.ini PATH /sbin:/usr/sbin:/bin:/usr/bin 参考)プログラムの内容 --------------------------------------------- require_once ('/var/DB接続情報保存ディレクトリ/password.php') try { $dbh = new PDO($DSN , $DBUSER , $DBPASS); $query=<<<EOF INSERT INTO test (name) VALUES (:name) EOF; $stmt = $dbh->prepare($query);    $name='斉藤太郎'; $stmt->bindParam(':name', $name); $stmt->execute(); }//try_end catch(PDOException $e) { print "Error!: " . $e->getMessage() . "<br>"; die(); }//catch_end ---------------------------------------------

    • ベストアンサー
    • PHP
  • linuxコマンドについて

    かなりのLinux初心者です。ですので本文中にも間違いがあるかもしれません。 Linuxのコマンドで、各コマンドというのはbinとかsbinの中にあるんですよね? そしてpathが通っていないと、/usr/local~とすべて記述しなくてはいけませんよね? そこで、質問です。 今、bin内にあるコマンド(who)をあるディレクトリで実行したい時、このpathの通し方を教えてもらいたいのです。 次の質問は、例えばwhoコマンドがどこのフォルダ(binやsbin)内にあるか分からない時、探し方を教えてもらいたいのです。 宜しくお願いします。 なにぶん初心者なので説明に不十分なところがあると思いますが、その時は補足要求してください。

  • PHP CLIでのphp.iniのパスを設定したい

    CLIモードで読み込まれるphp.iniのデフォルト値(/usr/local/lib)を「php -c path/file」を使わず、インストール時のconfigureオプションなどで指定することは可能なのでしょうか? 環境 CentOS 6.0 PHP5.3.9 (変な場所にインストールされているのは、他の開発環境もあるので隔離するためです。) configure時オプション --prefix=/home/user/local/php --with-config-file-path=/home/user/local/php/lib/ ↑これで自動的に/home/user/local/php/lib/php.iniが読み込まれると思ったのですが $ /home/user/local/php/bin/php -v PHP 5.3.9 (cli) (built: Jan 17 2012 17:22:45) $ /home/user/local/php/bin/php -i Configuration File (php.ini) Path => /home/user/local/php/lib/ Loaded Configuration File => /usr/local/lib/php.ini  なぜかデフォルト(/usr/local/lib/php.ini)が読み込まれてしまう $ /home/user/local/php/bin/php -c /home/user/local/php/lib/php.ini -i Configuration File (php.ini) Path => /home/user/local/php/lib/ Loaded Configuration File => /home/user/local/php/lib/php.ini  cオプションで指定するともちろん問題なし ちなみにブラウザで見るとConfiguration File (php.ini) PathとLoaded Configuration Fileが等しくなっています。 apacheのhttpd.confに PHPIniDir "/home/user/local/php/lib/" を記載しているからだと思いますが。 www.sample.com/index.php Configuration File (php.ini) Path/home/user/local/php/lib/ Loaded Configuration File/home/user/local/php/lib/php.ini

    • ベストアンサー
    • PHP
  • コマンドラインからプログラムが実行できません

    Windows上でエディタで書いたプログラム(echo.phpとします)をSSHを使ってサーバ(RedHatLinux)にアップロードし、それをサーバ上でコマンドラインから実行させたいのですが、うまくいきません。具体的には、コンソール画面に /usr/loca/bin/php /home/(省略)/echo.php と打ち込んだのですが、実行されずにコマンドプロンプトが表示されます。 nkfコマンドで文字コードをEUCに、改行コードをLFにしてみたり、 ファイルのパーミッションを777にしてみたりしたのですが、ダメでした。 エラーメッセージが出ないため、これ以上の対処の仕方がわからず困っています。原因と解決策を教えていただきたいです。 なお、#/usr/local/bin/php -v でcli版のPHP実行ファイルであることは確認しています。また、echo.phpの一行目に#!/usr/local/bin/phpと記述しスクリプト単体で実行させてもダメでした。 phpの-aオプションも試しましたがIntaractive mode enabledと表示された後にコマンドプロンプトが表示され、利用できません。 *echo.phpの中身 <?php echo "Hello\n"; ?>

    • ベストアンサー
    • PHP
  • PHP の system コマンド

    ブラウザからtest.php を実行してperl スクリプトを実行したいのですが、 うまく動きません。アクセス権の問題なのでしょうか。 よろしくお願いします。 ---------------- test.php ---------------------- <? system("/usr/bin/perl /home/usr/public_html/test.pl > /dev/null &"); echo "OK."; ?> ---------------- End File ---------------------- ---------------- test.pl ----------------------- #!/usr/local/bin/perl $sendmail = '/usr/sbin/sendmail'; open(SENDMAIL,"| $sendmail -t -i"); print SENDMAIL <<'END'; From: hoge@hoge.com To: moga@moga.com Subject: test Hello This is test END close(SENDMAIL); --------------------- End File -------------------------

    • ベストアンサー
    • PHP
  • メールをトリガーにPHPを自動起動したい

    PHPでも聞いてみたのですが、考えてみるとPHPと言うよりもLinuxのほうかもしれないということでお願いいたします 空メールの内容をPHPに渡したいと言うことで、いろいろ試してみましたが、なかなかうまくいきません Webminを使ってサーバの管理をしています MTAはsendmailを使っています sendmailの/etc/aliases にはこのように記述しました hoge: "|/usr/bin/procmail" /etc/procmailrc にはこのように記述しています PATH=/usr/bin:/bin:/usr/local/bin MAILDIR=/var/spool/mail LOGFILE=/var/www/html/****/procmail.log LOCKFILE=/var/www/html/****/procmail.lock :0 |/var/www/html/****/empty_mail_regist.php 私の考えでは hoge@hoge.comにメールが来る      ↓ sendmailが/usr/bin/procmailの起動      ↓ procmailが/etc/procmailrc を読み込んでプログラム実行 となると思っているのですが間違うでしょうか? /etc/aliases に hoge: "|/var/www/html/***/empty_mail_regist.php" と記述した場合、PHPのエラー(#!/usr/bin/php -q が抜けているなど)の場合はエラーメールが帰ってきます PHPにアクセスはしているが実行できていない理由がわかりません プログラム的なものだと思い、きめうちでメールを送るスクリプトを書きましたがダメでした もちろん、コマンドラインで実行するとメールの送信はできます スクリプトの所有者とメールアドレスのユーザは別なのでどれがダメなのかと思い、chownでhogeに変更してみましたが変わりはありませんでした 参考にしたサイトはこちらです メール配信時のPHPスクリプト起動(Sendmail編)http://www.dolphy.gr.jp/webap/topic/smrsh.html

  • LinuxのPHPのパス

    Linuxのレンタルサーバーで、PHPのパスを調べたのですが、以下のように2つ出てきました。 # whereis php php: /usr/local/bin/php /usr/local/php /usr/local/bin/phpは /usr/local/php5/bin/php-cli-5.2.9につながっていました。 /usr/local/phpの中身はこんなかんじでした。 drwxr-xr-x 2 root root 4096 Jul 2 16:29 bin drwxr-xr-x 2 root root 4096 Jun 25 12:13 etc drwxr-xr-x 3 root root 4096 Mar 17 10:28 include drwxr-xr-x 3 root root 4096 Jul 2 16:34 lib drwxr-xr-x 3 root root 4096 Mar 17 10:29 man drwxr-xr-x 3 root root 4096 Nov 15 2007 php PHPのパスはどちらですか?

    • ベストアンサー
    • PHP

専門家に質問してみよう