Cara men-debug masalah shell_exec
OK, di sini kita punya masalah: beberapa hal bekerja di terminal dan tidak berfungsi di shell_exec php (atau exec, spawn, apa pun). Mari kita pikirkan: apa perbedaan antara Anda dan php? Inilah tiga:
PHP dijalankan dari aturan server HTTP
Memang, terminal Anda berjalan dari yournamepengguna dan php dijalankan dari www-data. Jadi, ide pertama adalah membuka terminal dari www-datapengguna dan mencoba perintah yang sama. Begitu....
- Buka
/etc/passwdfile, temukan baris dengan www-datapengguna dan ubah shell login-nya (yang terakhir) dari /bin/false(atau apa pun) menjadi /bin/bash.
- Terbuka
www-data's terminal:su www-data
- Coba php -v atau apa pun yang tidak dapat Anda jalankan dari php. Jika tidak berhasil - Anda akan melihat log yang bagus dan dapat men-debug masalah.
- Jangan lupa untuk memperbaiki kembali
/etc/passwdfile saat Anda selesai
PHP dijalankan dari PHP .
PHP adalah enogh paranoid dan ada banyak opsi dalam konfigurasi apache / nginx dan php.ini yang dapat merusak upaya Anda.
Ini sedikit lebih rumit untuk di-debug. Ada dua opsi di sini:
Aktifkan log di browser dan lihat masalahnya. Edit Anda php.ini, nyalakan display_errorsdan semua bendera lainnya untuk melihat kesalahan di browser. Mereka Anda dapat membaca dan men-debug mereka.
Dapatkan www-datashell (lihat bagian pertama) dan jalankan sesuatu seperti
echo '<?php shell_exec("php -v"); ?>' | php
yang akan mengeksekusi kode php yang sama di konsol dan Anda akan dapat melihat kesalahan dan debug.
PHP dijalankan dari SELinux / apparmor
Selinux dan apparmor adalah hal-hal keamanan yang melarang aplikasi untuk melakukan tindakan tertentu (misalnya, menelurkan aplikasi lain atau beberapa aplikasi spesifik lainnya). Mungkin itu diaktifkan di server Anda.
Untuk memeriksa - menonaktifkan selinux / apparmor dan memeriksa apakah ada masalah.
Untuk memperbaiki - baca manual yang sesuai dan perbaiki aturan permisif tulis untuk kasus Anda.