PHP Python çağırıyor

5 Cevap php

Ben son zamanlarda bazı seçenekleri ile komut satırını kullanarak aramak olduğunu yazdı bir Python komut dosyası var. Ben şimdi çok ince bir web arayüzü benim Mac üzerinde yerel olarak bu komut aramak istiyorum.

Benim Mac mod_python veya mod_wsgi yükleme küçük sorun üzerinden gitmek istemiyorum, bu yüzden sadece Python komut aramak için PHP bir sistem () veya popen () yapmak için gidiyordu.

Daha iyi bir fikrin? Şimdiden teşekkürler!

5 Cevap

Ne yapıyorsun bağlı olarak, system() veya popen() mükemmel olabilir. Kullanım sistemi () Python komut çıkış yok ise veya tarayıcınıza doğrudan gitmek için Python betiğin çıktısını istiyorsanız. Eğer Python betiğin standart girdiden veri yazmak, ya da php Python betiğin standart çıkış veri okumak istiyorsanız () popen kullanın. popen () Sadece okumak veya yazmak izin, ancak her ikisi de olacaktır. Eğer her ikisi de isterseniz, proc_open() kontrol, ama her program bir şeyler yapmak, diğer bekliyor kilitlenmeleri önlemek için dikkatli olmak gerekir programlar arasında iki yönlü iletişim ile.

Eğer Python komut kullanıcı tarafından sağlanan verileri geçmek istiyorsanız, o zaman dikkatli olmak büyük bir şey komut enjeksiyon. Eğer dikkatli değilseniz, kullanıcı size gibi veri gönderebilir "; evilcommand;" ve programı iradesine karşı keyfi komutları çalıştırmak.

escapeshellarg() ve escapeshellcmd() Bu yardım, ama ben şahsen bir şey gibi kullanarak, iyi bilinen bir karakter değil her şeyi kaldırmak gibi olabilir

preg_replace('/[^a-zA-Z0-9]/', '', $str)

Pip - Python in PHP, ben hiç denemedim ama bu sadece böyle bir fırsat için sık vardı: Bir PHP uzantısı da var

Ben bu tür şeyleri kirli hızlı-ve-script için her zaman yapmak. Bu sadece bazı dış programı çağırmak için sistem / popen kullanan bir CGI veya PHP komut dosyası var oldukça yaygındır.

Web sunucusu geniş internete açıksa sadece ekstra dikkatli olun. Saldırganların makinenize keyfi komutları çalıştırmak için izin şekilde bu durumda GET / POST girdiyi emin olun.

Sen php üzerinden bir python komut dosyasını çalıştırmak ve tarayıcı üzerinde çıkışları olabilir.

Temelde python komut dosyası bu şekilde aramak zorunda:

$command = "python /path/to/python_script.py 2>&1";
$pid = popen( $command,"r");
while( !feof( $pid ) )
{
 echo fread($pid, 256);
 flush();
 ob_flush();
 usleep(100000);
}
pclose($pid);

Not: Eğer size python kodu () herhangi time.sleep çalıştırırsanız, bu tarayıcıda sonuçları verir vermez.

Full kodları, çalışma ziyareti How to execute python script from php and show output on browser için

Backquote operatör de yukarıda benzer bir sözdizimi kullanarak python komut dosyalarını çalıştırmak için izin verecektir

Python.py adlı bir python dosyası:

hello = "hello"
world = "world"
print hello + " " + world

Python.php adında bir php dosyası:

$python = `python python.py`;
echo $python;