WebページからPHPスクリプトにパラメーターを渡すにはどうすればよいですか?


139

Webページが読み込まれるたびにPHPスクリプトを呼び出しています。ただし、PHPスクリプトを実行するために必要なパラメーターがあります(通常、スクリプトをテストするときにコマンドラインを介して渡します)。

ページが読み込まれたときにスクリプトが実行されるたびにこの引数を渡すにはどうすればよいですか?


1
コードを投稿していただけますか?
SenorAmor 2012年

1
コマンドラインを実行したいですか?またはphpスクリプト?
クリストファーペラヨ2012年

よろしくお願いします。私は以下の答えを得ました:$ GETを使用し、それをURL自体のパラメーター値として渡します。
Nick

回答:


232

おそらく、次のようにコマンドラインで引数を渡しています。

php /path/to/wwwpublic/path/to/script.php arg1 arg2

...そして、スクリプトでそれらにアクセスします:

<?php
// $argv[0] is '/path/to/wwwpublic/path/to/script.php'
$argument1 = $argv[1];
$argument2 = $argv[2];
?>

HTTPを介して引数を渡す(Web経由でスクリプトにアクセスする)ときに行う必要があるのは、クエリ文字列を使用し、$ _ GETスーパーグローバルを介してそれらにアクセスすることです。

http://yourdomain.com/path/to/script.php?argument1=arg1&argument2=arg2に移動します

...そしてアクセス:

<?php
$argument1 = $_GET['argument1'];
$argument2 = $_GET['argument2'];
?>

(コマンドラインまたはブラウザーから)どこから呼び出したかに関係なくスクリプトを実行する場合は、次のようにします。

編集: Cthulhuがコメントで指摘したように、実行している環境をテストする最も直接的な方法は、PHP_SAPI定数を使用することです。私はそれに応じてコードを更新しました:

<?php
if (PHP_SAPI === 'cli') {
    $argument1 = $argv[1];
    $argument2 = $argv[2];
}
else {
    $argument1 = $_GET['argument1'];
    $argument2 = $_GET['argument2'];
}
?>

私は使用しますempty($_GET)$_GETは事前定義された値なので、常に設定されていると確信していますが、GETパラメータが設定されていない場合は空です。空の文字列と配列をempty()返しfalseます。
Tim S.

実際にチェックし$_GETなくても、スクリプトがコマンドラインコンテキストで呼び出された場合は実際には設定されないと思います。 empty()クエリ文字列なしでWebからスクリプトにアクセスすると、コマンドライン引数が検索されるため、より多くの通知がスローされます。
Jason

$ argv [0]は最初の例では実際にはarg1ではなく、「/ path / to / wwwpublic / path / to / script.php」になります。(php.net/manual/en/reserved.variables.argv.php
CasualT

3
私はパーティーに遅れていることに気づきましたが、確認する適切な方法はPHP_SAPI === 'cli'です。
クトゥルフ

1
@emanueledelgrande私はあなたが尋ねていることを完全に理解しているわけではありませんが、やってみます。.htaccessはApacheファイルです。Apacheは、ディレクティブを含む着信要求を処理し、.htaccessPHPを呼び出して要求への応答を作成します。したがって、コマンドラインを使用している場合.htaccessは、完全に無視されます。Web経由でスクリプトにアクセスしていて、リクエストを受け取った後で新しいクエリ文字列引数を追加する場合は、通常、を使用しmod_rewriteます。それでも十分に答えられない場合は、新しい質問を投稿することをお勧めします。
Jason

17
$argv[0]; // the script name
$argv[1]; // the first parameter
$argv[2]; // the second parameter

(コマンドラインまたはブラウザーから)呼び出し元に関係なくすべてのスクリプトを実行する場合は、次のようにします。

<?php
if ($_GET) {
    $argument1 = $_GET['argument1'];
    $argument2 = $_GET['argument2'];
} else {
    $argument1 = $argv[1];
    $argument2 = $argv[2];
}
?>

コマンドラインから呼び出してchmod 755 /var/www/webroot/index.php使用するには

/usr/bin/php /var/www/webroot/index.php arg1 arg2

ブラウザから呼び出すには、

http://www.mydomain.com/index.php?argument1=arg1&argument2=arg2
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.