2015-05-14 9 views
7

Ho bisogno di eseguire uno script php dalla riga di comando, ma se chiamo direttamente "php5 myfile.php", avrò qualche problema di sicurezza (principalmente le restrizioni openbasedir ei diritti di gruppo dell'utente &).Come eseguire un file php utilizzando un socket pool php5-fpm?

Quindi mi piacerebbe eseguire quel file php dagli stessi vincoli di un processo fpm (/etc/php5/fpm/pool.d/specific_process.conf). Questo processo ha un file calzino a /var/run/php5-fpm-specific.sock, che, credo, sarebbe limitato come nel file conf (stesso utente &, alcuni php_admin_value, ecc.).

Ma non riesco a vedere come posso farlo dalla riga di comando e dando alcuni argomenti.

ho provato qualcosa di simile:

php5 --bindpath /var/run/php5-fpm-specific.sock -f /path/to/my/file.php param1 param2 

Ma naturalmente non funziona. Come posso fare ?

Nota: il file che sto chiamando prevede alcuni parametri (qui, param1 e param2).

Grazie per il vostro aiuto.

+3

Non sei mescolando ai fini dei binari? Se è necessario eseguire uno script CLI, utilizzare 'php' che è destinato alla CLI. PHP-FPM è un processo supervisore per script php che devono essere eseguiti tramite il protocollo CGI.Non so perché proverai a uccidere una mosca con una bomba atomica se puoi aprire una finestra e lasciarla volare. –

+0

Forse sto mescolando lo scopo sì. Tutto ciò di cui ho bisogno è di essere vincolato alle restrizioni imposte dal processo fpm (principalmente user & group, restrizioni openbasedir). Se chiamo direttamente 'php5 myfile.php', il file avrà un accesso diverso. –

+2

Esatto, avrà un accesso diverso. Non è possibile utilizzare fpm per eseguire script dalla CLI. php-fpm esiste per elaborare richieste HTTP. O fai una richiesta HTTP in modo che fpm possa gestirla o implementare qualsiasi sicurezza tu abbia bisogno nello script CLI. –

risposta

12

Sarà necessario il file eseguibile cgi-fcgi (in Debian parte del pacchetto libfcgi0ldbl), allora si può farlo eseguendo questo comando (questa è una linea con \ sfuggire i ritorni a capo, si dovrebbe essere in grado di incollare questo alla vostra shell come questo):

SCRIPT_NAME=/file.php \ 
SCRIPT_FILENAME=/path/to/my/file.php \ 
REQUEST_METHOD=GET \ 
QUERY_STRING=param1=x\&param2=y \ 
cgi-fcgi -bind -connect /var/run/php5-fpm-specific.sock 

Riceverete quindi l'uscita, in quanto sarebbe stata inviata al server HTTP, in modo che includerà le intestazioni HTTP, per esempio per uno script contenente <?php echo "The time is ", date("H:i:s");:

Content-type: text/html 

The time is 13:46:35 
.210

Ci sono un paio di più parametri, ma questi sono i più essenziali (vedere come si mappa alla matrice $_SERVER, questo è ciò che sta accadendo in sottofondo):

  • SCRIPT_NAME questo è il nome dello script come si è visto dal lato HTTP. Nel mio esempio, il file potrebbe essere stata letta tramite http://localhost/file.php
  • SCRIPT_FILENAME questo è il percorso locale per la sceneggiatura - è quello che il server HTTP di solito determinare dal URL, qui è necessario specificare da soli
  • QUERY_STRING può essere utilizzato se si vuole anche a passare in qualcosa che sarebbe dopo la ? in un URL, essere consapevoli del fatto che ci troviamo in un guscio, così avresti bisogno di sfuggire la e commerciale in questo modo: \&

Vedi anche:

+0

Questo è fantastico! Sembra esattamente quello che stavo cercando. Ci proverò velocemente e tornerò da te. Grazie. –

+0

L'ho provato e funziona come un fascino. Ho solo una piccola domanda; Come posso evitare il parametro della stringa di query poiché lo chiamo dal terminale? Un url_encode? Nel caso avessi caratteri insoliti come &, \, /, ecc. Grazie! –

+0

Ti ho dato la taglia, dal momento che mi hai aiutato a ottenere quello che stavo cercando :) Grazie mille! –