PHP - Windows komut satırı argümanları

10 Cevap php

Windows XP altında PHP'nin komut satırından çalıştırmak için çalışıyorum.

O benim PHP komut dosyası parametrelerini sağlamak mümkün değilim aslında haricinde çalışır.

Benim test case:

echo "param = ".$param."\n";  
var_dump($argv);

Ben bu seslenmek istiyorum:

php.exe -f test.php -- param=test

Ama senaryo benim parametre kabul olsun asla.

Ben yukarıdaki komut olsun sonuç

`PHP Notice: Undefined variable: param C: \ test.php on line 2

param = ''
array(2) {
  [0]=> string(8) "test.php"
  [1]=> string(10) "param=test"
}

I am trying this using PHP 5.2.6. Is this a bug in PHP5?

The parameter passing is handled in the online help Note: If you need to pass arguments to your scripts you need to pass -- as the first argument when using the -f switch. This seemed to be working under PHP4, but not under PHP5. Under PHP4 I could use the same script that could run on the server without alteration on the command line. This is handy for local debugging, for example saving the output in a file to be studied.

10 Cevap

Neden param değere ayarlanmış olacak herhangi bir beklenti var mı? Sen $ argv diziden, arzu moda komut satırı ayrıştırma sorumlu sensin.

Eğer değişkenler GET benzer params geçmek istiyorsanız, o zaman parse_str() işlevini kullanabilirsiniz. Buna benzer bir şey:

<?php
parse_str($argv[1]);
?>

MyValue bir değerle $ test bir değişken üretecektir.

Bu yardımcı olur umarım!

Parametre geçirme online yardım Not işlenir: Eğer komut argüman geçmek gerekiyorsa geçmesine gerek - ilk argüman olarak-f anahtarını kullanırken. Bu ancak PHP5 altında, PHP4 altında çalışıyor gibi görünüyordu.

Ancak PHP hala bu argümanlar ayrıştırmaz. Sadece $ argv dizisindeki komut iletir.

PHP argümanlar PHP yürütülebilir ve hangi argümanlar komut içindir içindir hangi söylemek böylece için tek nedeni -- olduğunu.

İşte bu gibi şeyler yapmanıza olanak sağlar:

php -e -n -f myScript.php -- -f -n -e

(-F-n, ve-e after - myScript.php geçirilen olanlar önce kendini PHP geçirilir.).

PHP sizin için komut satırı parametreleri parameterize değildir. ARGV içinde 2 giriş "param = test" olduğunu çıktıyı göreceksiniz.

"Tam özellikli bir komut satırı seçenekleri ve argümanları ayrıştırıcı": Ne büyük olasılıkla istediğiniz PEAR paketini http://pear.php.net/package/Console_CommandLine kullanmaktır.

Yoksa mazoşist olmak ve ARGV geçmesi ve parametreleri kendiniz ayarlamak için kod ekleyebilirsiniz. Burada başlamak için çok basit bir pasajı ilk bölümü geçerli bir değişken adı değil veya fazla 1 '=' bir ARGV parçası varsa (bu çalışmaz bulunuyor:

foreach($argv as $v) {
    if(false !== strpos($v, '=')) {
    	$parts = explode('=', $v);
    	${$parts[0]} = $parts[1];
    }
}

$ Argv tüm komut satırı parametreleri içeren bir dizidir ... Bunu dizi ayrıştırmak ve kendinizi param $ ayarlamanız gerekir.

$tmp = $argv[1];             // $tmp="param=test"
$tmp = explode("=", $tmp);   // $tmp=Array( 0 => param, 1 => test)

$param = $tmp[1];            // $param = "test";

Sen gibi bir şey yapabilirsiniz:

if($argc > 1){
    if($argv[1] == 'param=test'){
    	$param = 'test';
    }
}

Gerektiği gibi Tabii ki, çok daha karışık alabilirsiniz.

Gibi bir şey kullanabilirsiniz

if (isset($argv[1]) {
 $arg1 = $argv[1];             
 $arg1 = explode("=", $arg1);   
 $param = $arg1[1];            
}

(how to handle the lack of parameter/s is up to you) or if you need a more complex scenario, look into a commandline parser library such as the one from Pear.

${$parts[0]} = $parts[1]; başka bir çözüm gönderdi kullanarak size doesnt really sound safe kodunuzda herhangi bir değişkeni, geçersiz sağlar.

Eğer kesme kenarında yaşayan isterseniz, PHP 5.3 sizin için tüm bu dağınık iş ilgilenir getOpt() komutu vardır. Biraz.

Eğer $ argv dizi kullanabilirsiniz. gibi bu:

<?php
 echo  $argv[1];
?>

remember that the first member of the $argv array (which is $argv[0]) is the name of the script itself, so in order to use the parameters for the application, you should start using members of the $argv[] from the '1'th index. when calling the application, use this syntax:

php myscript.php -- myValue

parametre için bir ad koymak gerek yoktur. Gördüğün gibi, sen [], (ilk parametre) ikinci üyesi dize PARAM = TEST oldu $ argv üzerine var_dump () dediği. değil mi? yani param için bir isim koymak gerek yoktur. sadece param değerini girin.