Puncte:1

Nu se poate rula scriptul python din PHP

drapel br

Această întrebare specială a fost pusă de atâtea ori cu sugestii grozave, dar abandonul brusc de către Askers nu ajută cu adevărat, deoarece nu s-au obosit niciodată să se întoarcă să spună ce a funcționat (presupunând că trebuie să fi funcționat în cele din urmă)

Încerc să rulez un script python din PHP, dar nu am reușit. Mediu: PHP 7.3, Python 3.8, CentOS 7, Apache 2.4, Bluehost VPS.

  • Am încercat pe amândouă exec și shell_exec

  • apachectl -S dezvăluie că serverul Apache rulează ca nobody:nobody

  • Adăugat nimeni in sudoer folosind nimeni ALL=(ALL) NOPASSWD: /etc/bin/python3

  • S-au adăugat permisiuni Execute la scriptul Python și s-a schimbat proprietarul la nimeni (la fel ca apache) ls -l testing.py-rwxr-xr-x 1 nimeni nimeni

  • Scriptul Python singur rulează bine din shell.

Iată codul meu:

<?php
error_reporting(E_ALL);
$command = 'python3 /home/uploads/testing.py';
$command = escapeshellcmd($command);
$shelloutput = exec($command,$output, $ret_code);
echo "<h1>";
echo $shelloutput;
echo $output;
echo $ret_code;
echo "</h1>";
?>

Scriptul python:

#!/usr/bin/env python3
import sys
print("Bună ziua")
sys.exit(8)

Când rulez fișierul PHP din browser, nu primesc absolut nimic. Aș aprecia orice ajutor pentru a rezolva acest lucru.

drapel in
Codul tău funcționează pentru mine. Verificați setările dvs. httpd. măriți verbozitatea jurnalului dacă este necesar.
drapel in
Nu aveți nevoie de o configurație sudo; nu trebuie să setați fișierul .py să fie executabil, deoarece îl furnizați ca parametru pentru binarul python3; python3 poate fi executat de fiecare utilizator.
drapel cn
`/etc/bin/python3`? esti sigur de acel nume de fisier?
Rocky avatar
drapel br
@DanilaVershinin Captură bună. „whereis python3” dă „python3: /usr/bin/python3” Încă nu a funcționat
Rocky avatar
drapel br
@GeraldSchneider Vă mulțumim pentru editarea întrebării, arată perfect acum. La ce ar trebui să mă uit în fișierul de configurare apache pentru a rula un python din shell? Am verificat fișierul Apache error_log, nimic acolo. Cum să creșteți verbozitatea jurnalului? Credeam că am deja max.
Rocky avatar
drapel br
@GeraldSchneider Problema pare să fi persistat, dar într-un mod diferit. PHP poate rula scripturi de pe serverul meu, cu excepția directorului care rulează un site Wordpress. M-am uitat peste tot pentru a vedea ce ar putea suprascrie directivele implicite php.ini, dar nu am putut. Vreo idee?
Puncte:0
drapel br

Found that the issue was with php.ini file, removed disable_functions="" directive and the Python script worked. As Gerald mentioned in the comments, I did not need to add anything to the sudoers file or change file permissions/users other than the standard +x permission attribute (or 0755)

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.