Rumah >pembangunan bahagian belakang >masalah PHP >Apakah yang perlu saya lakukan jika system() dalam php tidak mengembalikan output?
Penyelesaian kepada masalah yang system() dalam php tidak mengembalikan output: halakan semula ralat standard ke output standard dengan menambahkan [2 >& 1] pada arahan, contohnya [exec('some_command -- pilihan 2>& 1', $output, $ret);].
Persekitaran pengendalian artikel ini: sistem Windows 10, PHP 7, komputer thinkpad t480.
Baru-baru ini, semasa saya bekerja, saya secara tidak sengaja mendapati bahawa melaksanakan arahan biasa seperti 'ls', exec() boleh berfungsi dengan baik, contohnya:
exec('ls',$输出,$ retval); var_dump($ output,$ retval); // $ output包含文件名数组,retval === 0
Tetapi apabila saya cuba melaksanakan program lain, Tetapi saya tidak boleh mendapatkan output, seperti berikut:
exec('some_command --a_parameter',$ output ,$ retval); var_dump($ output,$ retval); // $ output包含一个空数组,结束$ retval === 0
Apabila melaksanakan arahan terus dari baris arahan, beberapa baris akan dicetak Saya tahu bahawa pelaksanaan arahan telah berjaya dan saya boleh melihat hasilnya (beberapa kemas kini fail, penambahan data, dll.), tetapi saya tidak dapat melihat outputnya.
Fungsi exec() hanya akan menangkap output standard. Saya tidak pasti bahawa ralat standard sentiasa dihantar ke log ralat apache, tetapi nampaknya mungkin.
Jika anda tidak perlu menggunakan sistem Unix, kami sebenarnya boleh mengubah hala ralat standard kepada output standard dengan menambahkan 2>& 1 pada arahan, supaya masalah itu dapat diselesaikan, contohnya:
exec('some_command --option 2>& 1',$ output,$ ret);
Pembelajaran yang disyorkan: latihan php
Atas ialah kandungan terperinci Apakah yang perlu saya lakukan jika system() dalam php tidak mengembalikan output?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!