Cara melaksanakan arahan linux dalam PHP: 1. Buat fail contoh PHP 2. Masukkan "#!/usr/bin/env php" pada baris pertama; count ($argv)){...}" dan kod lain boleh melaksanakan perintah Linux "tail -f".
Persekitaran pengendalian artikel ini: sistem linux5.9.8, PHP versi 7.1, komputer Dell G3.
Bagaimanakah PHP melaksanakan arahan linux?
PHP melaksanakan arahan linuxtail -f
Hari ini tiba-tiba saya terfikir bahawa seseorang telah bertanya Salah satu soalan saya ialah bagaimana untuk melaksanakan perintah tail -f
dalam Linux melalui PHP Di sini saya akan menganalisis dan melaksanakannya.
Ini agak mudah apabila anda memikirkannya. Ia mengesan fail melalui gelung untuk melihat sama ada saiz fail telah berubah , akan terdapat banyak butiran di dalamnya. Berikut adalah analisis terperinci.
Pada masa ini, banyak kandungan dikeluarkan serentak dan mungkin tidak kelihatan, jadi saya menetapkan ambang 8192
di sini Apabila panjang kandungan melebihi ambang ini Apabila , hanya 8192
bait terakhir dikeluarkan, supaya tiada masalah keterlihatan yang tidak jelas disebabkan penyegaran kawasan yang besar.
Soalan ini adalah teras program ini sama ada ia boleh berjaya atau tidak bergantung pada bahagian prestasi ini.
Pelaksanaan saya di sini adalah seperti berikut:
$fp
Perlu diingatkan di sini bahawa pemegang fail di sini perlu dibuka dan ditutup sekali sahaja dalam keseluruhan proses, jadi ia mesti diletakkan di luar gelung. file_size
dan file_size_new
kepada kedua-duanya 0. file_size_new
saiz fail dalam gelung Perlu diperhatikan di sini bahawa sebelum mendapatkan saiz fail dalam PHP, anda mesti menjalankan fungsi clearstatcache()
dan mengosongkan cache status fail, jika tidak, mungkin terdapat. penyelewengan dalam mendapatkan saiz fail. add_size = file_size_new - file_size
untuk melihat sama ada saiz fail berubah Jika ya, alihkan penuding fail ke kedudukan yang ditentukan, kemudian keluarkan kandungan yang baru ditambah dan kemas kini nilai file_size
kepada new_file_size
. #!/usr/bin/env php <?php if(2 != count($argv)){ fwrite( STDERR, "调用格式错误!使用格式 ./tail filename".PHP_EOL ); return 1; } $file_name = $argv[1]; define("MAX_SHOW", 8192); $file_size = 0; $file_size_new = 0; $add_size = 0; $ignore_size = 0; $fp = fopen($file_name, "r"); while(1){ clearstatcache(); $file_size_new = filesize($file_name); $add_size = $file_size_new - $file_size; if($add_size > 0){ if($add_size > MAX_SHOW){ $ignore_size = $add_size - MAX_SHOW; $add_size = MAX_SHOW; fseek($fp, $file_size + $ignore_size); } fwrite( STDOUT, fread($fp, $add_size) ); $file_size = $file_size_new; } usleep(50000); } fclose($fp);
Pelaksanaan Kod Baris pertama #!/usr/bin/env php
di sini memberitahu fail boleh laku bahawa fail boleh laku php
berada dalam sistem Cari dalam PATH
, kelebihan ini adalah mudah alih yang baik.
2016-02-22 11:28:51 Penambahbaikan
Saya menyemak manual rasmi PHP, fungsi fseek
boleh diperbaiki di sini, fungsi ini juga menerima Parameter pihak ketiga, menunjukkan jenis penuding offset, lalai ialah SEEK_SET
, mengimbangi dari awal, ia juga boleh ditetapkan kepada SEEK_CUR
, menunjukkan mengimbangi daripada kedudukan semasa, jadi di sini ia ditukar kepada fseek($fp, $ignore_size, $ignore_size);
Pembelajaran yang disyorkan: "Tutorial Video PHP"
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan arahan linux dalam php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!