• ベストアンサー

system関数

以下のように、phpでsystem関数を用いて $command = "php4 -q <ファイル名>.php"; system($command); コマンドラインからプログラムを実行していたんですが、ファイルを別サーバに移動させたところ、 実行できなくなりました。 双方ともphpのバージョンは4.0.6、 コマンドラインからphpを実行できるように設定されています。 変わった点はapacheのuserがnobodyから 他の名前に変更されています。 やはり、実行できないのはapacheのuserが変更されたのが 原因なのでしょうか? もし、そうならばどのように対処すればよいのでしょうか?よろしくお願いします。

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

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

  • ベストアンサー
  • Kizz
  • ベストアンサー率47% (30/63)
回答No.2

はじめまして、info_wolfさん。 的を得ていないアドバイスになるかも・・ですが、参考までに。 "php4"としているのはいわゆるphpパーサの実行ですよね? #ファイル名.phpを解析するために。 であるならば・・・、 ・php4でなく、これをそのphpがインストールされているマシン(#)上での  フルパス付きで指定  (#)おそらくapacheをたてているのと同マシンかと思いますが。 ・ブラウザからアクセスしたphpページからsystemやexec実行可能なように、  全てに実行権限(xをたてる。 chmod a+x *****)をたててみる。  #ページからのsystem,exec実行時はhttpdになったような気も・・(不明確) ・わざわざパーサ(php4)をコマンド文にかかず、ファイル名.php内で実行定義  してしまうのも楽。  ※ファイル名.phpの先頭に   #!/フルパス/php (ここでは実行ファイルがphpとして書いてますが、実質にあわせて) 上記の事で実行は可能かと思いますが、一応試しにやってみては。 では。

info_wolf
質問者

お礼

Kizzさん、回答ありがとうございます。 #!/フルパス/php で実行できるようになりました。 移動させる前のサーバでは、フルパスを 書かなくても実行できていたのですがねぇ。 気付きませんでした。 助かりました。 ありがとうございました。

その他の回答 (1)

  • mnabe
  • ベストアンサー率33% (427/1283)
回答No.1

 権限が変わっただけなら、権限をつけてあげれば??  そのコマンドが誰の持ち物で、どんな権限になっているのか調べて、apacheの実行ユーザと同じにしてあげればOKです。 ls -la  で権限をみて、 chown  で持ち主を変えるか chmod  で権限を変えるか  を試してみて下さい。

info_wolf
質問者

補足

早速の回答ありがとうございます。 上記のように試してみたんですが、 だめでした。 ありがとうございました。

関連するQ&A

  • phpから外部コマンドを使いたい

    外部コマンドを実行するために、phpのsystem()関数を使わせていただきました。 ところで、system('ls'); system('ls -l'); system('whoami');は、全部使えますが、 本当に使えたいsystem('unzip filename.zip');が使えないんです。 ApacheのUserは、nobodyです。 su nobodyにして、unzip filename.zipも使えるようなっております。 なぜ、phpから、system('unzip filename.zip'); は、使えないでしょうか? ご存じの方がいっらしゃいましたら、どうぞお教え下さい。

    • ベストアンサー
    • PHP
  • system関数で一部のプログラムしか起動できない

    タイトルの通りです。 実行環境は、Apache2+PHP4です(玄箱・Debian)。 system関数を使ってあるプログラムの実行結果をそのまま出力したいと考えています。 しかし、できるプログラム(コマンド)と、できないコマンドがあるのです。 system('df -h', $retval);などというように、dfやlsなどは結果が出るのですが、hddtemp、自前のシェルなどはうまく結果が出ません。 ただ、$retvalは0が出力されます。 状況の切り分けのため、「whoami」を実行したところ結果がうまく出力され、「www-data」と出るので、rootからwww-dataにログインし、hddtempを実行してみたところ、「コマンドが見つかりません」と出ます。ちなみにwww-dataはログイン可能ユーザー?ではありません。(/homeにディレクトリのないユーザー) dfやlsなどはwww-dataユーザーでも実行可能でした。 つまり、dfやlsと同じような状況をhddtempや自前シェルに適用したいのですが、どうしたらよいでしょうか。 何かヒントをお願いします。

    • 締切済み
    • PHP
  • AuthUserFile用に登録するためには

     初めて投稿します。よろしくお願いしますm(_ _)m  質問の内容は『PerlでProftpdのユーザファイルを作成するには』です。ブラウザを使って、IDやパスワードなどを登録するつもりなのですが、その際FTPd用のユーザファイルを作成しようと考えています。コマンドライン上から直接実行すれば成功するのですが、ブラウザ上からクライアントの操作で書き込みができません。どうすればよいか、どうかご教授くださいませ。 [環境]    OS:VineLinux3.2  FTPD:proftpd-1.2.10 [nobody] HTTPD:Apache-1.3.3 [nobody] 実行ファイル名:sample.cgi [手順] 1.ブラウザ上でユーザ名とパスワードを入力してもらう  →このとき、ユーザ名を[$user]、パスワードを[$passwd]に格納します 2.system関数を使って、ユーザ情報とパスワードをAuthUserFileで指定したファイルに格納する  →指定したファイルは[/etc/ftp.pass]です  このときのコマンドは、 $file = "(FTPdのソースディレクトリ)/contrib/ftpasswd"; [system ("$file --passwd --file=/etc/ftp.pass --name=$user \--uid=510 --gid=100 --home=/home/hoge --shell=/bin/bash");]  です。ftp.passのパーミッションは[744]で、所有ユーザは[nobody]です。  ブラウザで実行する前にコマンドラインから実行しようとしたのですが、コマンドライン上から[perl sample.cgi]と打ち込むとエラーが出てきました。 [ ftpasswd: using alternate file: /etc/ftppasswd ftpasswd: --passwd: missing required argument: --home ]  よろしければ、どうかご教授くださいませ。

  • PHPでのsystem関数の処理ができないです。

    PHPでsystem関数を使ってアプリケーションを実行するだけの 簡単なプログラムを作ったのですが、 ブラウザでPHPのページが開き終わって 処理は全て終わった状態になるのですが、 アプリケーションが全く起動しません。 PHPのプログラムは以下の通りです。 ************************************************ <html><head> <title>アプリケーション起動</title> </head><body> <?php $user_cmd = "C:\phpdev5\www\himekuri\Himekuri.exe"; $cmd = escapeshellarg($user_cmd); system($cmd); ?> </body></html> ************************************************ $user_cmdで指定したアドレスにあるHimekuri.exeという アプリケーションを起動しようとしています。 開発環境は OS:Windows2000 phpdev5(MySQL,Apache)を使用 といった感じです。 system関数を使用するのに何か設定などがいるのでしょうか? 分かる方ご教授お願いいたします。

    • ベストアンサー
    • PHP
  • system()で止まってしまいます

    anhttpd環境で作ったphp + vbsをapacheに持って行ったところ system()で止まってしまいます。 どこを見たら良いでしょうか? 作成環境 anhttpd + php4.3.1 ⇒httpdからはphp.exeを使用 不具合の発生した環境 apache1.3 + php4.3.1 試してみたこと 動作確認プログラムを作成 ・php側 引数を渡しvbsを呼び出すすだけの処理を記述 ・vbs側 受け取った引数をmsgboxで表示 コマンドラインからphpを実行 ⇒ msgbox表示 ブラウザからphpを実行 ⇒ msgboxが出ずに処理が終わらない

    • ベストアンサー
    • PHP
  • 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
  • system関数の実行結果の表示について

    system関数で、mysql -h host -u user -ppasswd dbname < xxx.sqlを 実行しているのですが、エラーメッセージが取得できずに困っています。 DOSプロンプトから実行した場合は、エラーなどがあるとDOSプロンプトに表示されると思うのですが、その結果を取得したいと思っています。 system関数では、取得できないのでしょうか?または、使い方が間違っているのでしょうか? print( system("mysql -h host -u user -ppasswd dbname < xxx.sql") , $intRet ); 環境:Windows2003+Mysql4.1.9+PHP4+Apache2

    • ベストアンサー
    • PHP
  • system関数でphpが動作しない

    phpプログラムからphpプログラムをバックグラウンドで動作させようと下記のようにsystem関数を使いましたが、phpが動作しませんでした。 system("/usr/local/bin/php /home/user/www/test.php > /dev/null &"); 「動作しない」様子が、異常でして、コマンドラインからtopで調べてみると、phpのプロセスIDが何度も立ち上がり、上記関数があるプログラムをサーバーから消さないと、その状態が続きます。しかし、プロセスは立ち上がっても、phpプログラムは正常に動作していなようです。 さくらインターネット(スタンダード)の共用サーバーを使っています。サーバーのOSは、FreeBSD 4.10です。 よろしくお願い致します。

    • 締切済み
    • PHP
  • systemをrootで実行したい

    初めて質問します。 LinuxのPHPで、system関数を使ってコマンドを実行したいのですが、 特定のシステムを設定するコマンドはエラーになります。 (ファイルリストとかは問題なく実行できるのですが・・。) たぶんroot権限がないからですよね? root権限が必要なコマンドを実行するにはどんな方法があるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPのSystem関数でcdしてもうまくできない

    PHPのSystem関数でcdしてもうまくできない PHPで特定フォルダを圧縮しようと以下のように書いてみました。 system("cd /var/www/html/hoge;zip -r hogehoge hoge.zip"); しかし上記だと何も実行されずapacheのエラーログを見ると cdでエラーとなり Not a directryとなります。 もちろん上記フォルダは存在しますし 上記コマンドをSSH上から実行すると正しく実行されます。 権限の問題かな?とも思ったのですが試しに以下のようにフルパスで書くときちんと実行できます。 (ただし圧縮ファイルに無駄な階層が入ってしまうので解決にはなっていないのですが) system("zip -r /var/www/html/hoge/hogehoge /var/www/html/hoge/hoge.zip"); 試しに以下のようにcdコマンドを売ってpwdできちんとcdできてるか試してみると system("cd /var/www/html/hoge;pwd"); →ダメ system("cd /var/www/html/;pwd"); →ダメ system("cd /var/www/;pwd"); →ダメ system("cd /var/;pwd"); →ダメ system("cd /;pwd"); →OK system("cd /tmp/"); →OK となります。 やっぱり権限関連のような気はするのですがなんでだろう? なお/var/www/html/以下はすべて所有権をapacheにしていますし hoge以下は777にしているので書き込み権限もあります。 なんでcdできないか解決方法の心当たりあったら教えてくください。 よろしくお願いします。 環境は以下の通りです。 CentOS 4.7 PHP 5.1.6

    • ベストアンサー
    • PHP

専門家に質問してみよう