2011-07-20 17 views
31

シェルを介してパラメータ付きのPHPファイルを実行する必要があります。シェルはパラメータ付きのPHPスクリプトを実行/実行します

htdocsには、/ file.php私は、パラメータ 'ショー' を持っている必要があり

を通過させることが-q PHPと

:ここ

は、私は、PHPファイルを実行する方法をあります

のphp -qのhtdocs/file.php?ショー= SHOW_NAME

does not work

誰かが私に設定パラメータでPHPファイルを実行させるために実行するコマンドを教えてもらえれば大いに感謝します。もしそうでなければ、私に正しい方向を導こうとする。

+0

「php」の代わりに「php-cgi」実行可能ファイルを使用してください。参照してください:http://stackoverflow.com/a/11965479/543738 –

答えて

35

test.phpを:

<?php 
print_r($argv); 
?> 

シェル:

$ php -q test.php foo bar 
Array 
(
    [0] => test.php 
    [1] => foo 
    [2] => bar 
) 
+1

私はPHPで$ _GET経由でパラメータを受け取ることはできませんが、$ argv、ありがとうございます。それを理解するまでにはしばらく時間がかかりました。 –

3

$argcおよび$argvからコマンドラインパラメータを読み取る必要があります。

疑問符を使用することは、URLで行うことであり、コマンドラインからPHPを実行することとは関係ありません。

も参照してください:http://www.sitepoint.com/php-command-line-1/

2

(かなり正確である)他の回答に加えて、あなたはまた、引数を渡すことができます環境パラメータとして、次のようになります。

FOO=42 BAR=quux php test.php 

これらは、その後、超広域$_ENVで利用可能になります。

+0

私はそのコマンドを入力するとき、私は "FOO"のエラーを取得します。 Windowsでxamppのシェルコマンドを使用していますが、それは何か変更されますか? –

+0

おそらくWindowsでは動作しませんが、ほとんどのUNIXタイプのシェルでうまく動作します。 – troelskn

+0

私はそれを動作させるために、私はPHPの$ _GET []関数によって受け取られることを期待していました。 $ arvgがすべてのパラメータを保持していることを理解するまでにはしばらく時間がかかりました。ありがとう。 –

0

あなたはPHPファイルから、それを使っているなら、あなたは(popenの使用することができます)、このような何かを:

$part = $show_name; //or whatever you want with spaces 

$handle = popen("php -q nah.php -p=". escapeshellarg($part) . " 2>&1", "r"); 

これが(引用符で$part変数をラップするために、にescapeshellarg()関数を使用していますその中の引用符をエスケープする)、シェル引数として安全に使うことができます。

5

あなたがウェブサーバ(単にPHPインタプリタインストールされていないだけではなく、LAMP/LNMP /など)を持っている場合は - ちょうどこの

wget -O - -q -t 1 "http://mysite.com/file.php?show=show_name" >/dev/null 2>&1 

どこ試してみてください。(手紙 -

  • «-O - »を"O"、ゼロではない!標準出力に&標準エラー出力をリダイレクトどこにも
  • «-q» - - 静かwgetの実行
  • «-t 1)
  • «>を/ dev/null 2> & 1»をstdoutに "ダウンロードしたHTMLを" リダイレクト» - ちょうどが接続しようとPHPのでは

(デフォルト20を好きではない)、それは次のようになめらか "実行" になるだろう:

function exec_local_url($url) { 
    exec('/usr/bin/wget -O - -q -t 1 "http://'. $_SERVER['HTTP_HOST'] .'/' 
    . addslashes($url) . '" >/dev/null 2>&1' 
); 
} 

// ... 

exec_local_url("file.php?show=show_name"); 
exec_local_url("myframework/seo-readable/show/show_name"); 

したがって、スクリプトを変更してargc/argvを処理する必要はなく、通常は$ _GETを使用することができます。

ジョブをバックグラウンドで実行する場合は、exを参照してください。 Unix/Windows, Setup background process? from php code

私はcronジョブでwgetを使用しています。それが役に立てば幸い。

+0

securityやperformaceに関して 'exec'を使ってジョブを実行しているときに' wget'と 'php'コマンドを使うのに違いはありますか? – Gixty

+0

確かにセキュリティは同じです。パフォーマンス - もちろん 'wget'は遅くなりますが、上記のように手軽です。 wgetを使用すると、要求はすべて隠された段階になり、apache/nginx/lighttpdのキャッシュ、書き換えなどの処理を要求します。 'php'を直接呼び出すと、複雑な回避策を犯すことになります。つまり、すべての場合に適用可能ではありません。とにかく、私はあなたの現在のケース、脳、ベンチマークツールを取ってそれを良いものにするだけでいいと思う! ;) – FlameStorm

関連する問題