Apakah php cli memiliki sesi?

Mulai dari versi 4. 3. 0, PHP mendukung jenis SAPI baru (Antarmuka Pemrograman Aplikasi Server) bernama CLI yang berarti Antarmuka Baris Perintah. Sesuai dengan namanya, fokus utama tipe SAPI ini adalah mengembangkan aplikasi shell (atau desktop juga) dengan PHP. Ada beberapa perbedaan antara CLI SAPI dan SAPI lainnya yang dijelaskan pada bab ini. Perlu disebutkan bahwa CLI dan CGI adalah SAPI yang berbeda meskipun mereka memiliki banyak perilaku yang sama

CLI SAPI dirilis untuk pertama kalinya dengan PHP 4. 2. 0, tetapi masih eksperimental dan harus diaktifkan secara eksplisit dengan --enable-cli saat dijalankan. / konfigurasi. Sejak PHP4. 3. 0 CLI SAPI tidak lagi eksperimental dan opsi --enable-cli aktif secara default. Anda dapat menggunakan --disable-cli untuk menonaktifkannya

Mulai dari PHP4. 3. 0, nama, lokasi dan keberadaan binari CLI/CGI akan berbeda tergantung bagaimana PHP diinstal pada sistem Anda. Secara default saat menjalankan make, CGI dan CLI dibuat dan ditempatkan masing-masing sebagai sapi/cgi/php dan sapi/cli/php, di direktori sumber PHP Anda. Anda akan mencatat bahwa keduanya bernama php. Apa yang terjadi selama make install tergantung pada garis konfigurasi Anda. Jika modul SAPI dipilih selama konfigurasi, seperti apxs, atau opsi --disable-cgi digunakan, CLI disalin ke {PREFIX}/bin/php selama make install jika tidak, CGI ditempatkan di sana. Jadi, misalnya, jika --with--apxs ada di baris configure Anda, maka CLI akan disalin ke {PREFIX}/bin/php selama make install. Jika Anda ingin mengganti instalasi biner CGI, gunakan make install-cli setelah make install. Atau Anda dapat menentukan --disable-cgi di baris konfigurasi Anda

Catatan. Karena --enable-cli dan --enable-cgi keduanya diaktifkan secara default, hanya dengan memiliki --enable-cli di baris configure Anda tidak berarti CLI akan disalin sebagai {PREFIX}/bin/php selama make install

Paket windows antara PHP 4. 2. 0 dan PHP4. 2. 3 mendistribusikan CLI sebagai php-cli. exe, tinggal di folder yang sama dengan php CGI. exe. Dimulai dengan PHP4. 3. 0 paket windows mendistribusikan CLI sebagai php. exe di folder terpisah bernama cli, jadi cli/php. exe. Dimulai dengan PHP 5, CLI didistribusikan di folder utama bernama php. exe. Versi CGI didistribusikan sebagai php-cgi. exe

Pada PHP 5, php-win baru. exe didistribusikan. Ini sama dengan versi CLI, kecuali bahwa php-win tidak menampilkan apa pun dan karenanya tidak menyediakan konsol (tidak ada "kotak dos" yang muncul di layar). Perilaku ini mirip dengan php-gtk. Anda harus mengonfigurasi dengan --enable-cli-win32

SAPI apa yang saya miliki?. Dari shell, mengetik php -v akan memberi tahu Anda apakah php adalah CGI atau CLI. Lihat juga fungsi php_sapi_name() dan konstanta PHP_SAPI

Catatan. Halaman manual Unix telah ditambahkan di PHP 4. 3. 2. Anda dapat melihatnya dengan mengetikkan man php di lingkungan shell Anda

Perbedaan yang luar biasa dari CLI SAPI dibandingkan dengan SAPI lainnya

  • Berbeda dengan CGI SAPI, tidak ada header yang ditulis ke output

    Meskipun CGI SAPI menyediakan cara untuk menekan header HTTP, tidak ada tombol setara untuk mengaktifkannya di CLI SAPI

    CLI dimulai dalam mode senyap secara default, meskipun sakelar -q dan --no-header disimpan untuk kompatibilitas sehingga Anda dapat menggunakan skrip CGI yang lebih lama

    Itu tidak mengubah direktori kerja ke skrip. (-C dan --no-chdir switch disimpan untuk kompatibilitas)

    Pesan error teks biasa (tanpa format HTML)

  • Ada beberapa php. ini yang ditimpa oleh CLI SAPI karena tidak masuk akal di lingkungan shell

    Tabel 43-1. Diganti php. ini arahan

    DirectiveCLI SAPI default valueCommentFALSEIni bisa sangat sulit untuk membaca pesan kesalahan di shell Anda ketika itu berantakan dengan semua tag HTML yang tidak berarti, oleh karena itu direktif ini default ke FALSE. BENARDiinginkan bahwa keluaran apa pun yang berasal dari print(), echo() dan teman-teman segera ditulis ke keluaran dan tidak di-cache dalam buffer apa pun. Anda masih dapat menggunakan penyangga keluaran jika ingin menunda atau memanipulasi keluaran standar. 0 (tidak terbatas) Karena kemungkinan penggunaan PHP yang tidak terbatas di lingkungan shell, waktu eksekusi maksimum telah disetel menjadi tidak terbatas. Sementara aplikasi yang ditulis untuk web seringkali dieksekusi dengan sangat cepat, aplikasi shell cenderung memiliki waktu eksekusi yang lebih lama. BENAR

    Karena pengaturan ini BENAR, Anda akan selalu memiliki akses ke argc (jumlah argumen yang diteruskan ke aplikasi) dan argv (array argumen aktual) di CLI SAPI

    Mulai dari PHP4. 3. 0, variabel PHP $argc dan $argv didaftarkan dan diisi dengan nilai yang sesuai saat menggunakan CLI SAPI. Sebelum versi ini, pembuatan variabel-variabel ini berlaku seperti pada versi CGI dan MODULE yang memerlukan direktif PHP untuk diaktifkan. Terlepas dari pengaturan versi atau register_globals, Anda selalu dapat melalui salah satu atau $HTTP_SERVER_VARS. Contoh. $_SERVER['argv']

    Catatan. Arahan ini tidak dapat diinisialisasi dengan nilai lain dari file konfigurasi php. ini atau custom (jika ditentukan). Ini adalah batasan karena nilai default tersebut diterapkan setelah semua file konfigurasi diuraikan. Namun, nilainya dapat diubah selama runtime (yang tidak masuk akal untuk semua arahan tersebut, mis. g. )

  • Untuk memudahkan bekerja di lingkungan shell, konstanta berikut didefinisikan

    Tabel 43-2. Konstanta spesifik CLI

    ConstantDescriptionSTDINAn sudah membuka streaming ke stdin. Ini menghemat membukanya dengan
    $ pwd
    /tmp
    
    $ php -q another_directory/test.php
    /tmp/another_directory
    8

    $ pwd
    /tmp
    
    $ php -q another_directory/test.php
    /tmp/another_directory
    _9

    Jika Anda ingin membaca satu baris dari stdin, Anda dapat menggunakan
    $ pwd
    /tmp
    
    $ php -f another_directory/test.php
    /tmp
    0STDOUTAliran yang sudah dibuka ke stdout. Ini menghemat membukanya dengan
    $ pwd
    /tmp
    
    $ php -f another_directory/test.php
    /tmp
    1

    $ pwd
    /tmp
    
    $ php -q another_directory/test.php
    /tmp/another_directory
    _9

    STDERRan sudah membuka streaming ke stderr. Ini menghemat membukanya dengan
    $ pwd
    /tmp
    
    $ php -f another_directory/test.php
    /tmp
    3

    $ pwd
    /tmp
    
    $ php -q another_directory/test.php
    /tmp/another_directory
    _9

    Mengingat hal di atas, Anda tidak perlu membuka e. g. aliran untuk stderr sendiri tetapi cukup gunakan konstanta alih-alih sumber daya aliran

    php -r 'fwrite(STDERR, "stderr\n");'
    Anda tidak perlu menutup aliran ini secara eksplisit, karena aliran ini ditutup secara otomatis oleh PHP saat skrip Anda berakhir
  • CLI SAPI tidak mengubah direktori saat ini ke direktori skrip yang dieksekusi

    Contoh menunjukkan perbedaan dengan CGI SAPI

    $ pwd
    /tmp
    
    $ php -f another_directory/test.php
    /tmp
    5

    Saat menggunakan versi CGI, hasilnya adalah

    $ pwd
    /tmp
    
    $ php -q another_directory/test.php
    /tmp/another_directory
    Ini jelas menunjukkan bahwa PHP mengubah direktori saat ini ke salah satu skrip yang dieksekusi

    Menggunakan hasil CLI SAPI

    $ pwd
    /tmp
    
    $ php -f another_directory/test.php
    /tmp
    Ini memungkinkan fleksibilitas yang lebih besar saat menulis alat shell di PHP

    Catatan. CGI SAPI mendukung perilaku CLI SAPI ini melalui tombol -C saat dijalankan dari baris perintah

Daftar opsi baris perintah yang disediakan oleh biner PHP dapat dilihat kapan saja dengan menjalankan PHP dengan tombol -h

Usage: php [options] [-f]  [args...]
       php [options] -r  [args...]
       php [options] [-- args...]
  -s               Display colour syntax highlighted source.
  -w               Display source with stripped comments and whitespace.
  -f         Parse .
  -v               Version number
  -c | Look for php.ini file in this directory
  -a               Run interactively
  -d foo[=bar]     Define INI entry foo with value 'bar'
  -e               Generate extended information for debugger/profiler
  -z         Load Zend extension .
  -l               Syntax check only (lint)
  -m               Show compiled in modules
  -i               PHP information
  -r         Run PHP  without using script tags 
  -h               This help

  args..          Arguments passed to script. Use -- args when first argument 
                   starts with - or script is read from stdin

CLI SAPI memiliki tiga cara berbeda untuk mendapatkan kode PHP yang ingin Anda jalankan

  1. Memberitahu PHP untuk mengeksekusi file tertentu

    php my_script.php
    
    php -f my_script.php
    Kedua cara (apakah menggunakan -f switch atau tidak) jalankan file my_script. php. Anda dapat memilih file apa pun untuk dijalankan - skrip PHP Anda tidak harus diakhiri dengan. php tetapi dapat memiliki nama atau ekstensi apa pun yang Anda inginkan
  2. Lewati kode PHP untuk mengeksekusi langsung pada baris perintah

    php -r 'print_r(get_defined_constants());'
    Perhatian khusus harus diberikan dalam hal penggantian variabel shell dan penggunaan kutipan

    Catatan. Baca contoh dengan hati-hati, tidak ada tag awal atau akhir. Sakelar -r tidak membutuhkannya. Menggunakannya akan menyebabkan kesalahan parser

  3. Berikan kode PHP untuk dieksekusi melalui input standar (stdin)

    Ini memberikan kemampuan yang kuat untuk membuat kode PHP secara dinamis dan mengumpankannya ke biner, seperti yang ditunjukkan dalam contoh (fiksi) ini

    $ some_application | some_filter | php | sort -u >final_output.txt
Anda tidak dapat menggabungkan salah satu dari ketiga cara tersebut untuk mengeksekusi kode

Seperti setiap aplikasi shell, biner PHP menerima sejumlah argumen tetapi skrip PHP Anda juga dapat menerima argumen. Jumlah argumen yang dapat diteruskan ke skrip Anda tidak dibatasi oleh PHP (shell memiliki batas ukuran tertentu dalam jumlah karakter yang dapat diteruskan; biasanya Anda tidak akan mencapai batas ini). Argumen yang diteruskan ke skrip Anda tersedia di array global $argv. Indeks nol selalu berisi nama skrip (yaitu - jika kode PHP berasal dari input standar atau dari saklar baris perintah -r). Variabel global terdaftar kedua adalah $argc yang berisi jumlah elemen dalam array $argv (bukan jumlah argumen yang diteruskan ke skrip)

Selama argumen yang ingin Anda sampaikan ke skrip Anda tidak dimulai dengan - karakter, tidak ada hal khusus yang harus diperhatikan. Meneruskan argumen ke skrip Anda yang dimulai dengan - akan menimbulkan masalah karena PHP sendiri menganggap harus menanganinya. Untuk mencegah hal ini, gunakan pemisah daftar argumen --. Setelah pemisah ini diuraikan oleh PHP, setiap argumen yang mengikutinya diteruskan tanpa disentuh ke skrip Anda

# This will not execute the given code but will show the PHP usage
$ php -r 'var_dump($argv);' -h
Usage: php [options] [-f]  [args...]
[...]

# This will pass the '-h' argument to your script and prevent PHP from showing it's usage
$ php -r 'var_dump($argv);' -- -h
array(2) {
  [0]=>
  string(1) "-"
  [1]=>
  string(2) "-h"
}

Namun, ada cara lain menggunakan PHP untuk skrip shell. Anda dapat menulis skrip di mana baris pertama dimulai dengan #. /usr/bin/php. Setelah ini, Anda dapat menempatkan kode PHP normal yang disertakan dalam tag awal dan akhir PHP. Setelah Anda mengatur atribut eksekusi file dengan tepat (mis. g. chmod +x test) skrip Anda dapat dijalankan seperti skrip shell atau perl biasa

$ pwd
/tmp

$ php -f another_directory/test.php
/tmp
6Dengan asumsi file ini bernama test di direktori saat ini, sekarang kita dapat melakukan hal berikut.
$ chmod +x test
$ ./test -h -- foo
array(4) {
  [0]=>
  string(6) "./test"
  [1]=>
  string(2) "-h"
  [2]=>
  string(2) "--"
  [3]=>
  string(3) "foo"
}
Seperti yang Anda lihat, dalam hal ini tidak perlu berhati-hati saat meneruskan parameter yang dimulai dengan - ke skrip Anda

Opsi panjang tersedia sejak PHP 4. 3. 3

Tabel 43-3. Opsi baris perintah

OptionLong OptionDescription-s--syntax-highlight

Sintaks warna tampilan sumber yang disorot

Opsi ini menggunakan mekanisme internal untuk mengurai file dan menghasilkan versi HTML yang disorot dan menulisnya ke output standar. Perhatikan bahwa semua itu dilakukan untuk menghasilkan blok

$ pwd
/tmp

$ php -f another_directory/test.php
/tmp
7 tag HTML, tanpa header HTML

Catatan. Opsi ini tidak bekerja sama dengan opsi -r

-s--syntax-highlighting

Alias ​​​​dari --syntax-highlight

-w--strip

Tampilkan sumber dengan komentar dan spasi kosong

Catatan. Opsi ini tidak bekerja sama dengan opsi -r

-f--file

Mem-parsing dan mengeksekusi nama file yang diberikan ke opsi -f. Sakelar ini bersifat opsional dan dapat ditinggalkan. Hanya memberikan nama file untuk dieksekusi sudah cukup

-v--versi

Menulis versi PHP, PHP SAPI, dan Zend ke keluaran standar, mis. g

$ php -v
PHP 4.3.0 (cli), Copyright (c) 1997-2002 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2002 Zend Technologies
_-c--php-ini

Dengan opsi ini seseorang dapat menentukan direktori tempat mencari php. ini atau Anda dapat menentukan file INI khusus secara langsung (yang tidak perlu diberi nama php. ini), e. g

$ pwd
/tmp

$ php -q another_directory/test.php
/tmp/another_directory
0Jika Anda tidak menentukan opsi ini, file akan dicari. -n--no-php-ini

Abaikan php. ini sama sekali. Switch ini tersedia sejak PHP 4. 3. 0

-d--definisikan

Opsi ini memungkinkan Anda untuk menetapkan nilai khusus untuk salah satu arahan konfigurasi yang diizinkan di php. ini. Sintaksnya adalah

$ pwd
/tmp

$ php -q another_directory/test.php
/tmp/another_directory
_1

Contoh (garis dibungkus untuk alasan tata letak)

$ pwd
/tmp

$ php -q another_directory/test.php
/tmp/another_directory
2-a--interaktif

Menjalankan PHP secara interaktif

-e--profil-info

Hasilkan informasi tambahan untuk debugger/profiler

-z--zend-ekstensi

Muat ekstensi Zend. Jika hanya nama file yang diberikan, PHP mencoba memuat ekstensi ini dari jalur pustaka default saat ini di sistem Anda (biasanya ditentukan /etc/ld. jadi. conf pada sistem Linux). Melewati nama file dengan informasi jalur absolut tidak akan menggunakan jalur pencarian perpustakaan sistem. Nama file relatif dengan informasi direktori akan memberi tahu PHP hanya untuk mencoba memuat ekstensi relatif ke direktori saat ini

-l--sintaksis-periksa

Opsi ini menyediakan cara mudah untuk hanya melakukan pemeriksaan sintaks pada kode PHP yang diberikan. Jika berhasil, teks Tidak ada kesalahan sintaks yang terdeteksi ini ditulis ke output standar dan kode pengembalian shell adalah 0. Jika gagal, teks Errors parsingin selain pesan kesalahan parser internal ditulis ke output standar dan kode pengembalian shell diatur ke 255

Opsi ini tidak akan menemukan kesalahan fatal (seperti fungsi yang tidak terdefinisi). Gunakan -f jika Anda juga ingin menguji kesalahan fatal

Catatan. Opsi ini tidak bekerja sama dengan opsi -r

-m--modul

Dengan menggunakan opsi ini, PHP mencetak modul PHP dan Zend bawaan (dan dimuat).

$ pwd
/tmp

$ php -q another_directory/test.php
/tmp/another_directory
3-i--infoOpsi baris perintah ini memanggil phpinfo(), dan mencetak hasilnya. Jika PHP tidak berfungsi dengan benar, disarankan untuk menggunakan php -i dan lihat apakah ada pesan kesalahan yang dicetak sebelum atau menggantikan tabel informasi. Berhati-hatilah saat menggunakan mode CGI hasilnya dalam HTML dan karenanya cukup besar. -r--lari

Opsi ini memungkinkan eksekusi PHP langsung dari dalam baris perintah. Tag awal dan akhir PHP ( dan ?>) tidak diperlukan dan akan menyebabkan kesalahan parser jika ada

Catatan. Kehati-hatian harus dilakukan saat menggunakan bentuk PHP ini agar tidak bertabrakan dengan substitusi variabel baris perintah yang dilakukan oleh shell

Contoh menunjukkan kesalahan parser

$ pwd
/tmp

$ php -q another_directory/test.php
/tmp/another_directory
4Masalahnya di sini adalah bahwa sh/bash melakukan substitusi variabel bahkan ketika menggunakan tanda kutip ganda ". Karena variabel $foo tidak mungkin untuk didefinisikan, itu tidak berkembang menjadi apa-apa yang menghasilkan kode diteruskan ke PHP untuk eksekusi benar-benar membaca.
$ pwd
/tmp

$ php -q another_directory/test.php
/tmp/another_directory
5Cara yang benar adalah dengan menggunakan tanda kutip tunggal '. Variabel dalam string yang dikutip tunggal tidak diperluas oleh sh/bash.
$ pwd
/tmp

$ php -q another_directory/test.php
/tmp/another_directory
6Jika Anda menggunakan shell yang berbeda dari sh/bash, Anda mungkin mengalami masalah lebih lanjut. Jangan ragu untuk membuka laporan bug di http. //bug. php. net/ atau kirim email ke phpdoc@lists. php. bersih. Seseorang masih dapat dengan mudah mengalami masalah saat mencoba memasukkan variabel shell ke dalam kode atau menggunakan garis miring terbalik untuk keluar. Anda telah diperingatkan

Catatan. -r tersedia di CLI SAPI dan bukan di CGI SAPI

-h--helpDengan opsi ini, Anda dapat memperoleh informasi tentang daftar sebenarnya dari opsi baris perintah dan beberapa deskripsi satu baris tentang apa yang mereka lakukan. -?--usageAlias ​​dari --help

Eksekusi PHP dapat digunakan untuk menjalankan skrip PHP yang benar-benar independen dari server web. Jika Anda menggunakan sistem Unix, Anda harus menambahkan baris pertama khusus ke skrip PHP Anda, dan membuatnya dapat dieksekusi, sehingga sistem akan mengetahui, program apa yang harus menjalankan skrip tersebut. Pada platform Windows Anda dapat mengaitkan php. exe dengan opsi klik dua kali dari. php, atau Anda dapat membuat file batch untuk menjalankan skrip melalui PHP. Baris pertama yang ditambahkan ke skrip untuk bekerja di Unix tidak akan merugikan di Windows, jadi Anda dapat menulis program lintas platform dengan cara ini. Contoh sederhana penulisan program baris perintah PHP dapat ditemukan di bawah ini

Contoh 43-1. Script dimaksudkan untuk dijalankan dari baris perintah (script. php)

$ pwd
/tmp

$ php -f another_directory/test.php
/tmp
_8

$ pwd
/tmp

$ php -f another_directory/test.php
/tmp
_9

Pada skrip di atas, kami menggunakan baris khusus pertama untuk menunjukkan bahwa file ini harus dijalankan oleh PHP. Kami bekerja dengan versi CLI di sini, jadi tidak akan ada cetakan tajuk HTTP. Ada dua variabel yang dapat Anda gunakan saat menulis aplikasi baris perintah dengan PHP. $argc dan $argv. Yang pertama adalah jumlah argumen ditambah satu (nama skrip yang berjalan). Yang kedua adalah larik yang berisi argumen, dimulai dengan nama skrip sebagai angka nol ($argv[0])

Dalam program di atas kami memeriksa apakah ada kurang atau lebih dari satu argumen. Juga jika argumennya adalah --help, -help, -h atau -?, kami mencetak pesan bantuan, mencetak nama skrip secara dinamis. Jika kami menerima argumen lain, kami mengulanginya

Jika Anda ingin menjalankan skrip di atas di Unix, Anda harus membuatnya dapat dieksekusi, dan cukup menyebutnya sebagai skrip. php echothis atau skrip. php -h. Di Windows, Anda dapat membuat file batch untuk tugas ini

Contoh 43-2. File batch untuk menjalankan skrip PHP baris perintah (script. kelelawar)

$ pwd
/tmp

$ php -q another_directory/test.php
/tmp/another_directory
_7

Dengan asumsi Anda menamai skrip program di atas. php, dan Anda memiliki CLI php. exe di c. \php\cli\php. exe file batch ini akan menjalankannya untuk Anda dengan opsi tambahan Anda. naskah. bat echothis atau skrip. mandi

Lihat juga dokumentasi ekstensi Readline untuk lebih banyak fungsi yang dapat Anda gunakan untuk meningkatkan aplikasi baris perintah Anda di PHP

Bagaimana saya bisa mengakses sesi di PHP?

Bagaimana Mengakses Nilai Dari Sesi di PHP? . Dalam contoh yang disebutkan di bawah ini, Anda akan membuat sesi lain dengan variabel yang menyimpan nama Anda. session_start();by using the global variable $_SESSION. In the example stated below, you will create another session with a variable that stores your name. session_start();

Apa gunanya PHP CLI?

Antarmuka Baris Perintah (CLI) PHP memungkinkan Anda menjalankan skrip PHP saat masuk ke server melalui SSH . ServerPilot menginstal beberapa versi PHP di server Anda sehingga ada beberapa executable PHP yang tersedia untuk dijalankan. Anda juga dapat mengonfigurasi versi PHP yang digunakan saat Anda hanya memanggil perintah php.

Bisakah Anda menjalankan PHP dari baris perintah?

Anda tinggal mengikuti langkah-langkah untuk menjalankan program PHP menggunakan baris perintah . Buka terminal atau jendela baris perintah. Pergi ke folder atau direktori yang ditentukan di mana file php ada.

Bagaimana PHP menangani sesi?

PHP merespons dengan mengirimkan token unik yang mengidentifikasi sesi saat ini . Ini dikenal sebagai ID sesi. Dalam semua permintaan berikutnya, browser mengirimkan ID sesi untuk mengatakan, "Hai, ini saya lagi. " Semua data lain yang terkait dengan sesi disimpan di server web. Hanya ID sesi yang diteruskan bolak-balik.