Rumah > pembangunan bahagian belakang > masalah PHP > Apakah maksud php cli?

Apakah maksud php cli?

青灯夜游
Lepaskan: 2023-03-15 14:08:02
asal
4474 orang telah melayarinya

Dalam php, nama penuh cli ialah "Antara Muka Baris Perintah", yang bermaksud "antara muka baris arahan Ia adalah mod jalankan baris arahan, terutamanya digunakan untuk aplikasi shell pembangunan PHP, iaitu menggunakan PHP untuk shell Pembangunan skrip.

Apakah maksud php cli?

Persekitaran pengendalian tutorial ini: sistem Windows 7, PHP versi 7.1, komputer DELL G3

Dalam php, nama penuh cli ialah "Antara Muka Baris Perintah", yang bermaksud "antara muka baris arahan", ialah mod berjalan baris arahan.

Analisis ringkas mod operasi baris arahan CLI PHP

Apabila melakukan pembangunan, kami bukan sahaja membuat pelbagai tapak web atau antara muka, tetapi juga sering perlu menulis beberapa baris arahan skrip digunakan untuk mengendalikan beberapa transaksi back-end. Contohnya, pemprosesan data dan statistik, dsb. Sudah tentu, demi kecekapan, apabila urus niaga mungkin mengambil masa yang lama, pemasa pelayan sering digunakan untuk memanggil skrip pada masa yang tetap untuk pemprosesan, supaya pelanggan boleh mempunyai pengalaman pengguna yang lebih baik. Hari ini kita akan belajar tentang mod berjalan baris arahan PHP, iaitu PHP CLI.

CLI dan CGI

Pertama, mari kita lihat perbezaan antara CLI dan CGI. Kita semua tahu bahawa Nginx menggunakan FastCgi untuk memanggil perkhidmatan PHP. CGI ialah antara muka pengaturcaraan universal, iaitu antara muka yang disediakan kepada pemanggil untuk menggunakan program ini. Pelayan jenis ini, Nginx, tidak menjalankan program PHP secara langsung, tetapi menggunakan FastCgi untuk melaksanakan program PHP dan mendapatkan hasil pulangan.

CLI ialah Antara Muka Baris Perintah, iaitu antara muka baris arahan. Terutamanya digunakan sebagai aplikasi shell pembangunan untuk PHP. Iaitu, gunakan PHP untuk membangunkan skrip shell. Berbanding dengan shell Linux asli, sudah tentu ia lebih mudah. Dalam keadaan baris arahan, anda boleh menjalankan kod PHP tertentu atau fail PHP tertentu dengan terus menggunakan arahan php.

Selain itu, kita juga boleh terus menggunakan phpcgi pada baris arahan untuk menjalankan sekeping kod PHP atau fail PHP tertentu Apakah perbezaan antaranya dan secara langsung menggunakan arahan php untuk menjalankannya?

  • Output CLI tidak mempunyai sebarang maklumat pengepala

  • CLI tidak akan menukar direktori kerja kepada direktori semasa skrip apabila dijalankan

  • CLI mengeluarkan mesej ralat teks biasa (bukan format HTML) apabila ralat berlaku

Mengatasi tetapan tertentu dalam php.ini secara paksa kerana ini tetapan Ia tidak bermakna dalam persekitaran shell

// PHP的CLI命令行运行模式浅析.php
echo getcwd();

//  php-cgi dev-blog/php/202004/source/PHP的CLI命令行运行模式浅析.php
// ...../MyDoc/博客文章/dev-blog/php/202004/source

// php dev-blog/php/202004/source/PHP的CLI命令行运行模式浅析.php
Salin selepas log masuk

Mari pilih contoh yang paling tipikal Dalam fail yang kami jalankan, kami menggunakan getcwd() untuk mengeluarkan direktori di mana skrip semasa sedang berjalan kaedah berjalan. Hasil keluaran jelas berbeza. php-cgi output berdasarkan direktori di mana fail terletak, manakala output php berdasarkan direktori di mana arahan sedang dijalankan.

Jalankan kod PHP terus

Apabila melakukan beberapa penyahpepijatan mudah, kita boleh menjalankan sekeping kod terus melalui CLI.

// php -r "echo 121;"
// 121
Salin selepas log masuk

Iaitu, cuma tambah parameter -r, diikuti dengan sekeping kod, yang mesti disertakan dalam tanda petikan. Dan adalah disyorkan untuk menggunakan petikan tunggal untuk tanda petikan ini Contoh berikut akan menunjukkan mengapa petikan tunggal adalah lebih baik.

CLI Dapatkan Parameter

Anda juga boleh menghantar parameter kepada skrip dalam mod baris arahan.

// PHP的CLI命令行运行模式浅析.php
print_r($argv);
// php-cgi dev-blog/php/202004/source/PHP的CLI命令行运行模式浅析.php 1 2 3
// X-Powered-By: PHP/7.3.0
// Content-type: text/html; charset=UTF-8

// php dev-blog/php/202004/source/PHP的CLI命令行运行模式浅析.php 1 2 3
// Array
// (
//     [0] => dev-blog/php/202004/source/PHP的CLI命令行运行模式浅析.php
//     [1] => 1
//     [2] => 2
//     [3] => 3
// )
Salin selepas log masuk

Dalam fail ujian, kami mencetak pembolehubah $argv. Apabila skrip PHP dijalankan, semua parameter baris arahan akan disimpan dalam pembolehubah $argv, dan terdapat juga pembolehubah $argc yang akan menyimpan bilangan parameter.

Kami masih menggunakan php-cgi dan php, dua mod untuk ujian Dari sini kami dapati bahawa kandungan yang dicetak oleh $argv dalam mod php-cgi sebenarnya adalah maklumat pengepala, bukan maklumat parameter tertentu. Ini betul, selepas semua, mod CGI pada asalnya adalah antara muka yang disediakan untuk pelayan web, jadi ia menerima parameter seperti pos dan dapatkan dan bukannya parameter baris arahan.

Dalam mod CLI, kami memperoleh kandungan parameter seperti biasa dan $argv[0] sentiasa menyimpan fail dan laluan semasa yang sedang dijalankan.

Pilihan praktikal baris arahan CLI

Akhir sekali, kami memperkenalkan beberapa pilihan yang biasa digunakan dalam baris arahan.

  • -r Parameter lulus apabila menjalankan kod secara terus

// php -r "var_dump($argv);" app 
// Warning: var_dump() expects at least 1 parameter, 0 given in Command line code on line 1
// 双引号 ",sh/bash 实行了参数替换

// php -r 'var_dump($argv);' app
// array(2) {
//     [0]=>string(19) "Standard input code"
//     [1]=>string(3) "app"
// }

// php -r 'var_dump($argv);' -- -h
// array(2) {
//     [0]=>string(19) "Standard input code"
//     [1]=>string(2) "-h"
// }
Salin selepas log masuk

Sekeping kod pertama adalah meparameterkan kod CLI yang dijalankan pada petikan berganda Apabila lulus, amaran akan dilaporkan secara langsung. Malah, ia adalah mudah untuk memahami $ dalam petikan berganda akan membuat sh/bash sistem berfikir bahawa ini adalah pembolehubah dan menggantikan parameter pembolehubah. Oleh itu, adalah lebih disyorkan untuk menggunakan petikan tunggal untuk ujian mudah harian.

Sekeping kod kedua boleh mencetak kandungan parameter yang diluluskan seperti biasa. Baris ketiga kod memerlukan apabila anda perlu menghantar kandungan dengan simbol -, anda perlu memberikan pemisah senarai parameter -- dahulu. Ini kerana kandungan -xxx akan membuat arahan php berfikir bahawa ini adalah pilihan arahan dan bukannya parameter, jadi kami menambah pembatas untuk menghantar kandungan parameter selepas pembatas ke dalam kod sebagaimana adanya.

Jalankan PHP secara interaktif

// php -a
// php > $a = 1;
// php > echo $a;
// php > 1
Salin selepas log masuk

Tambah pilihan -a, PHP akan berjalan secara interaktif, kita boleh menulis terus dalam kod keadaan interaktif atau menjalankan apa sahaja.

Lihat phpinfo() dan modul yang dipasang

这两个应该是大家经常会使用的两个选项。

// 输出 phpinfo()
// php -i

// 输出 PHP 中加载的模块
// php -m

// 查看模块详细信息
// php --ri swoole
Salin selepas log masuk

另外我们还可以通过 --ri 模块名 这个命令来查看具体某个扩展模块的详细信息。比如这里我们可以查看到 swoole 扩展的版本及相关的配置信息。

查看某个文件

// 显示去除了注释和多余空白的源代码
// php -w dev-blog/php/202004/source/PHP的CLI命令行运行模式浅析.php
// <?php
//  echo getcwd(); print_r($argv);
// 通过 linux 管道读取输入
// cat dev-blog/php/202004/source/PHP的CLI命令行运行模式浅析.php | php -r "print file_get_contents(&#39;php://stdin&#39;);"
// ......这个文件里面所有的内容
Salin selepas log masuk

最后两个小技巧,一个是通过 -w 选项,我们可以打印这个 php 文件中所有非注释和换行的内容。可以看成是像前端的代码压缩一样的能力。我们这个测试文件中有非常多的注释,通过这个命令后我们打印出来的内容是去除掉所有注释和空白行的结果。

另一个是我们可以用 linux 管道的方式向 PHP CLI 发送数据。这里我们通过 cat 查看我们的测试文件然后通过管道发送给 PHP CLI,在脚本中使用 STDIN 来读取管道发送过来的内容完成了整个文件内容的打印。这里我们没进行任何过滤,所以打印的是整个文件里面的内容,大家可以运行这个命令来测试。

总结

其实命令行模式运行的时候还有很多的选项,这里我们只是选取了一部分非常有用的内容进行展示。当然,大部分框架都提供了用于命令行的脚本框架,比如 laravel 中可以通过 php artisan make:command 来创建命令行脚本,然后使用 php artisan 来运行框架中的脚本。这些内容将来我们在学习框架方面知识的内容将会进行详细的讲解。

命令行 CLI 模式的应用非常广泛,几乎任何项目中都会使用到,所以,深入的学习掌握它将会使我们大受裨益。

推荐学习:《PHP视频教程

Atas ialah kandungan terperinci Apakah maksud php cli?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan