PHP dosyalarının çalıştırılması

CLI SAPI çalıştırmak istediğiniz PHP kodunu getirmek için üç farklı yola sahiptir:

  1. PHP'ye belli bir dosyayı çalıştırmasını söyleyerek.

    php ornek_betik.php
    
    php -f ornek_betik.php
    

    Her iki yolla da (-f seçeneğini olsun olmasın) ornek_betik.php dosyası çalıştırılır. Çalıştırmak için herhangi bir dosyayı seçebilirsiniz - PHP betikleriniz .php uzantısı ile bitmek zorunda değildir, istediğiniz herhangi bir isim ve uzantıya sahip olabilirler.

    Bilginize:

    Eğer betiklerinize değiştirgeler aktarmanız gerekirse -f seçeneğini kullandığınızda ilk değiştirge olarak -- aktarmanız gerekir.

  2. Doğrudan komut satırında işletmek üzere PHP kodunu aktararak.

    php -r 'print_r(get_defined_constants());'
    

    Kabuk değişken değişimi ve tırnak kullanımı için özel bir çaba sarfetmek gerekir.

    Bilginize:

    Örneği dikkatle okuyunuz, hiçbir başlangıç veya bitiş etiketi yok! -r seçeneği bunlara ihtiyaç duymaz. Bunların kullanımı çözümleme hatasına yol açar.

  3. Çalıştırılacak PHP kodunu standart girdiden (stdin) yollamak suretiyle.

    Bu, PHP kodunu devingen olarak oluşturma ve bunu çalıştırma yeteneği sağlar. Örneğin:

    $ bir_uygulama | bir_suzgec | php | sort -u > nihai_sonuc.txt
    
Kodu çalıştırmak için bu üç yol birlikte kullanılamaz.

Her kabuk uygulamasındaki gibi, PHP çalıştırılabiliri bir takım değiştirgeler alabildiği gibi PHP betiğiniz de değiştirgeler alabilir. Betiğinize aktarabileceğiniz değiştirge sayısı PHP tarafından sınırlandırılmamıştır (kabukta aktarılabilecek karakter sayısı sınırlıdır; genellikle bu sınıra ulaşmazsınız). Betiğinize aktarılan değiştirgeler $argv küresel dizisinde bulunur. Sıfır indisi her zaman betik adını içerir. PHP kodu standart girdiden veya -r komut satırı seçeneğiyle çalıştıysa betik adı - olur. Eğer kod standart girdiden bir boru ile çalıştırılırsa bu yine geçerlidir.

İkinci kayıtlı küresel değişken $argc'dir ve $argv dizisindeki eleman sayısını içerir (betiğe aktarılan değiştirge sayısını değil).

Betiğinize aktarmak istediğiniz değiştirgeler - karakteriyle başlamadığı sürece, özel bir şeye dikkat etmeniz gerekmez. Betiğinize - ile başlayan bir değiştirge aktarımı sorun yaratır çünkü PHP yorumlayıcısı bunu kendisinin işlemesi gerektiğini düşünecektir. Bunu önlemek için, değiştirge listesi ayracı olan -- kullanın, bunu izleyen her değiştirge ellenmeden betiğinize aktarılır.

# Bu verilen kodu çalıştırmaz fakat PHP kullanımını gösterir
$ php -r 'var_dump($argv);' -h
Usage: php [options] [-f] <file> [args...]
[...]

# Bu '-h' değiştirgesini betiğinize aktarır ve
# PHP'nin değiştirgeyi görmesini önler
$ php -r 'var_dump($argv);' -- -h
array(2) {
  [0]=>
  string(1) "-"
  [1]=>
  string(2) "-h"
}

Kabuk betikleri için PHP farklı bir yoldan kullanılabilir. İlk satırı #!/usr/bin/php ile başlayan bir betik yazabilirsiniz. Bunu takip eden satırlara başlangıç ve bitiş etiketlerine sahip normal PHP kodunuzu yerleştirebilirsiniz. Dosyanın çalıştırma izinlerini ayarladığınızda (örn. chmod +x deneme) betiğiniz normal bir kabuk veya perl betiği gibi işletilir.

Örnek 1 - PHP betiğini kabuk betiği olarak çalıştırmak

#!/usr/bin/php
<?php
var_dump
($argv);
?>

Geçerli dizindeki bu dosyanın isminin deneme olduğunu varsayarsak, aşağıdakini yapabiliriz:

$ chmod +x deneme
$ ./deneme -h -- foo
array(4) {
  [0]=>
  string(6) "./deneme"
  [1]=>
  string(2) "-h"
  [2]=>
  string(2) "--"
  [3]=>
  string(3) "foo"
}

Gördüğünüz gibi, bu durumda betiğinize - ile başlayan değiştirge aktarırken hiçbir şeye dikkat etmeniz gerekmez.

PHP çalıştırılabiliri HTTP sunucusundan tamamen bağımsız olarak PHP betikleri çalıştırmak için kullanılabilir. Eğer Unix sistemi üzerindeyseniz, PHP betiğinizin başına özel bir #! satırı eklemeli ve dosyanızı çalıştırılabilir yapmalısınız; böylece sistem betiğinizi hangi programın çalıştıracağını bilir. Windows üzerinde .php dosyalarına çift tıklama seçeneği ile php.exeilişkilendirebilir veya betiği PHP üzerinden çalıştıracak bir yığın dosyası yapabilirsiniz. Unix'de çalışması için betiğe eklenen ilk satır Windows'da sorun çıkarmaz, böylece platformdan bağımsız programlar yazabilirsiniz. Örnek basit bir komut satırı PHP programı aşağıdaki gibi olabilir.

Örnek 2 - Komut satırından çalıştırılması planlanan betik (betik.php)

#!/usr/bin/php
<?php

if ($argc != || in_array($argv[1], array('--help''-help''-h''-?'))) {
?>
Bu tek seçenekli bir komut satırı PHP betiğidir.

  Kullanımı:
  <?php echo $argv[0]; ?> <secenek>

  <secenek> yazdırmak istediğiniz bir kelime olabilir.
  --help, -help, -h,
  veya -? seçenekleriyle, bu yardımı alabilirsiniz.

<?php
} else {
    echo 
$argv[1];
}
?>

Yukarıdaki betikte, bu dosyanın PHP tarafından çalıştırılması gerektiğini belirten özel bir ilk satır kullandık. Burada CLI sürümü ile çalışıyoruz, böylece HTTP başlık çıktıları olmayacak. PHP ile komut satırı uygulamaları yazarken kullanabileceğiniz iki değişken vardır: $argc ve $argv. Birincisi değiştirge sayısından bir fazlasıdır (çalışan betiğin adı). İkincisi değiştirgeleri içeren bir dizidir, sıfır numarayla başlar ve ilk elemanında betik adını içerir ($argv[0]).

Yukarıdaki programda birden farklı sayıda değiştirge olup olmadığı kontrol ettik. Ayrıca eğer değiştirge --help , -help , -h veya -? ise yardım iletisini yazdırdık ve $argv[0] ile betik adını devingen olarak yazdırdık. Bunlardan başka değiştirgeler aldıysak bunlar yerine onları yazdırdık.

Eğer yukarıdaki betiği Unix üzerinde çalıştırmak isterseniz betiği çalıştırılabilir yapmalı ve betik.php echothis veya betik.php -h ile çağırmalısınız. Windows'da bu iş için bir yığın dosyası yapabilirsiniz:

Örnek 3 - Bir komut satırı PHP betiği çalıştırmak için yığın dosyası (betik.bat)

@echo OFF
"C:\php\php.exe" script.php %*

Yukarıdaki programı betik.php olarak adlandırdığınız ve C:\php\php.exe içinde CLI'nin php.exe olduğu varsayılarak bu yığın dosyası sizin eklediğiniz seçeneklerle çalışacaktır: betik.bat echothis veya betik.bat -h.

PHP'deki komut satırı uygulamalarını iyileştirmek için kullanabileceğiniz işlevlerle ilgili bilgi için Readline eklentisinin belgesine bakınız.

Windows üzerindeyseniz PHP, Microsoft Windows üzerinde PHP Komut Satırı bölümünde açıklandığı gibi .php uzantısına veya C:\php\php.exe çalıştırılabilirinin belirtilmesine gerek kalmadan çalıştırılmak üzere yapılandırılabilir.

add a note add a note

User Contributed Notes 7 notes

up
34
php at richardneill dot org
4 years ago
On Linux, the shebang (#!) line is parsed by the kernel into at most two parts.
For example:

1:  #!/usr/bin/php
2:  #!/usr/bin/env  php
3:  #!/usr/bin/php -n
4:  #!/usr/bin/php -ddisplay_errors=E_ALL
5:  #!/usr/bin/php -n -ddisplay_errors=E_ALL

1. is the standard way to start a script. (compare "#!/bin/bash".)

2. uses "env" to find where PHP is installed: it might be elsewhere in the $PATH, such as /usr/local/bin.

3. if you don't need to use env, you can pass ONE parameter here. For example, to ignore the system's PHP.ini, and go with the defaults, use "-n". (See "man php".)

4.  or, you can set exactly one configuration variable. I recommend this one, because display_errors actually takes effect if it is set here. Otherwise, the only place you can enable it is system-wide in php.ini. If you try to use ini_set() in your script itself, it's too late: if your script has a parse error, it will silently die.

5. This will not (as of 2013) work on Linux. It acts as if the whole string, "-n -ddisplay_errors=E_ALL" were a single argument. But in BSD, the shebang line can take more than 2 arguments, and so it may work as intended.

Summary: use (2) for maximum portability, and (4) for maximum debugging.
up
11
petruzanautico at yah00 dot com dot ar
6 years ago
As you can't use -r and -f together, you can circumvent this by doing the following:
php -r '$foo = 678; include("your_script.php");'
up
1
david at frankieandshadow dot com
1 year ago
A gotcha when using #!/usr/bin/php at the start of the file as noted above:

if you originally edited the file on Windows and then attempt to use it on Unix, it won't work because the #! line requires a Unix line ending. Bash gives you the following error message if it has DOS line endings:
"bash: /usr/local/bin/wpreplace.php: /usr/bin/php^M: bad interpreter: No such file or directory"

(In Emacs I used "CTRL-X ENTER f" then type "unix" and ENTER to convert)
up
5
spencer at aninternetpresence dot net
6 years ago
If you are running the CLI on Windows and use the "-r" option, be sure to enclose your PHP code in double (not single) quotes. Otherwise, your code will not run.
up
0
gabriel at figdice dot org
11 months ago
Regarding shebang:

In both Linux and Windows, when you execute a script in CLI with:

    php script.php

then PHP will ignore the very first line of your script if it starts with:

    #!

So, this line is not only absorbed by the kernel when the script file is executable, but it is also ignored by the PHP engine itself.

However, the engine will NOT ignore the first #! line of any included files withing your "outer" script.php.
Any "shebang" line in an included script, will result in simply outputting the line to STDOUT, just as any other text residing outside a <?php ...  ?> block.
up
-7
gar37bic at gmail dot com
1 year ago
For Linux and similar, the actual path to php may differ according to the particular distribution's layout.  Sometimes it is in /usr/local/bin/php, sometimes /usr/bin/php, and even /home/user/bin/php.  So #/usr/bin/php may need to be changed.

But there is an alternative:  Use #/usr/bin/env php instead.  This uses the environmental setup, and will ordinarily find PHP in one of your $PATH locations, searching down the path to the first hit. (At least I think that's how it works.)  If your CLI script will be run in different environments on different machines, this allows it to work without changes.  I believe this also works on BSD (which also means MacOS?) but I don't have one around any more to confirm.
up
-21
andrew-by at hotmail dot com
6 years ago
If you want your batch file's window stay opened after executing the PHP script just add "pause" at the last line. So it should look like:

@echo OFF
"C:\php\php.exe" script.php %*
pause
To Top