I'm mencoba untuk menjalankan Python script dari PHP menggunakan perintah berikut:
exec('/usr/bin/python2.7 /srv/http/assets/py/switch.py arg1 arg2');
Namun, PHP hanya doesn't menghasilkan output apapun. Kesalahan pelaporan diatur ke E_ALL dan display_errors di.
Berikut ini's apa yang saya've mencoba:
python2
, /usr/bin/python2
dan python2.7
bukan /usr/bin/python2.7
exec
, shell_exec
, sistem
.Namun, jika saya menjalankan
if (exec('echo TEST') == 'TEST')
{
echo 'exec works!';
}
ini bekerja baik-baik saja saat shutdown sekarang
doesn't melakukan apa-apa.
PHP memiliki izin untuk mengakses dan mengeksekusi file.
EDIT: Terima kasih untuk Alejandro, saya bisa memperbaiki masalah. Jika anda memiliki masalah yang sama, don't lupa bahwa server web anda mungkin/mudah-mudahan doesn't dijalankan sebagai root. Coba log in sebagai webserver anda's user atau pengguna dengan izin mirip dan mencoba untuk menjalankan perintah sendiri.
Diuji pada Ubuntu Server 10.04. Saya berharap hal ini membantu anda juga di Arch Linux.
Di PHP gunakan fungsi shell_exec:
Jalankan perintah melalui shell dan kembali menyelesaikan output string.
Itu kembali output dari eksekusi perintah atau NULL jika kesalahan terjadi atau perintah tidak menghasilkan output.
<?php
$command = escapeshellcmd('/usr/custom/test.py');
$output = shell_exec($command);
echo $output;
?>
Di Python file test.py
, memverifikasi teks ini di baris pertama: (lihat shebang menjelaskan):
#!/usr/bin/env python
Juga file Python harus benar-hak istimewa (eksekusi untuk user www-data / apache jika skrip PHP berjalan di browser atau keriting)
dan/atau harus "eksekusi". Juga semua perintah ke dalam .py
file harus benar-hak:
Diambil dari php manual:
Hanya pengingat bagi orang yang mencoba untuk menggunakan shell_exec di unix-jenis platform dan dapat't tampaknya untuk mendapatkan itu untuk bekerja. PHP dijalankan sebagai web user pada sistem (umumnya www Apache), sehingga anda perlu untuk pastikan bahwa pengguna web memiliki hak untuk apapun file atau direktori yang anda mencoba untuk menggunakan di shell_exec perintah. Lainnya bijaksana, itu tidak't muncul untuk melakukan apa-apa.
Untuk membuat executable file pada unix-jenis platform:
chmod +x myscript.py
Jika anda ingin tahu status kembali perintah dan mendapatkan seluruh stdout
output anda bisa benar-benar menggunakan exec
:
$command = 'ls';
exec($command, $out, $status);
$out
adalah array dari semua lini. $status
adalah kembalinya status. Sangat berguna untuk debugging.
Jika anda juga ingin melihat stderr
output anda dapat bermain dengan proc_open atau hanya menambahkan 2>&1
ke $perintah
. Yang terakhir ini sering cukup untuk mendapatkan sesuatu yang bekerja dan cara yang lebih cepat untuk "menerapkan".
Untuk memperjelas perintah yang digunakan berdasarkan situasi
exec ()
Mengeksekusi program eksternal
sistem ()
Mengeksekusi program eksternal dan menampilkan output
passthru ()
Mengeksekusi program eksternal dan menampilkan output baku
Dalam kasus saya saya perlu untuk membuat sebuah folder baru di www
direktori yang disebut script
. Dalam script
saya menambahkan file baru yang disebut test.py
.
Saya kemudian digunakan sudo chown www-data:akar script
dan sudo chown www-data:root test.py
.
Kemudian saya pergi ke new script
direktori dan digunakan sudo chmod +x test.py
.
Saya test.py file ini akan terlihat seperti ini. Catatan yang berbeda Python versi:
#!/usr/bin/env python3.5
print("Hello World!")
Dari php yang saya lakukan sekarang ini:
$message = exec("/var/www/scripts/test.py 2>&1");
print_r($message);
Dan anda harus melihat: Hello World!
Metode di atas tampaknya menjadi kompleks. Menggunakan metode saya sebagai referensi.
Aku memiliki dua file:
run.php
mkdir.py
Di sini, saya've dibuat sebuah halaman HTML yang berisi PERGI tombol. Setiap kali anda menekan tombol ini sebuah folder baru akan dibuat di direktori dan path telah anda sebutkan.
run.php
<html>
<body>
<head>
<title>
run
</title>
</head>
<form method="post">
<input type="submit" value="GO" name="GO">
</form>
</body>
</html>
<?php
if(isset($_POST['GO']))
{
shell_exec("python /var/www/html/lab/mkdir.py");
echo"success";
}
?>
mkdir.py
#!/usr/bin/env python
import os
os.makedirs("thisfolder");
Ini sangat sepele, tetapi hanya ingin membantu siapa saja yang sudah diikuti bersama Alejandro's saran, tetapi mengalami kesalahan ini:
sh: blabla.py: perintah tidak ditemukan
Jika ada yang mengalami kesalahan itu, kemudian sedikit perubahan yang perlu dibuat untuk file php dengan Alejandro:
$command = escapeshellcmd('python blabla.py');