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 yourname
pengguna dan php dijalankan dari www-data
. Jadi, ide pertama adalah membuka terminal dari www-data
pengguna dan mencoba perintah yang sama. Begitu....
- Buka
/etc/passwd
file, temukan baris dengan www-data
pengguna 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/passwd
file 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_errors
dan semua bendera lainnya untuk melihat kesalahan di browser. Mereka Anda dapat membaca dan men-debug mereka.
Dapatkan www-data
shell (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.