web-dev-qa-db-ja.com

シェルの実行/パラメーター付きのphpスクリプト

シェルを介してパラメーター付きのphpファイルを実行する必要があります。

phpファイルの実行方法は次のとおりです。

php -q htdocs/file.php

パラメータ 'show'を渡す必要があり、

php -q htdocs/file.php?show = show_name

効かない

パラメータを設定してphpファイルを実行するために実行するコマンドを誰かが説明してくれたら、とてもありがたいです。そうでない場合は、正しい方向に導いてください。

35
Patrick Lorio

test.php:

<?php
print_r($argv);
?>

シェル:

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

Webサーバーがある場合(PHPインタープリターだけでなく、LAMP/LNMP/etcもインストールされている場合)-これを試してください

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

ここで:

  • "-O-"—(文字「O」、ゼロではありません!)「downloaded html」をstdoutにリダイレクトします
  • ">/dev/null 2> 1"— stdout stderr出力をどこにもリダイレクトしない
  • "-q"— quietwgetrun
  • "-t 1"—ちょうど1接続を試みます(デフォルト20とは異なります)

PHPの「exec」では、次のようになります。

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を使用できます。

バックグラウンドで実行されるジョブが必要な場合は、例を参照してください。 nix/Windows、PHPコードからのバックグラウンドプロセスのセットアップ?

Cronジョブでwgetを使用したアプローチを使用しています。それが役に立てば幸い。

5
FlameStorm

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

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

参照: http://www.sitepoint.com/php-command-line-1/

3
Brad

他の回答(これは非常に正しいです)に加えて、次のように環境パラメーターとして引数を渡すこともできます。

FOO=42 BAR=quux php test.php

その後、スーパーグローバル$_ENV

2
troelskn

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()関数を使用します。

0
kritya