2010-11-05 2 views

risposta

1

chiamare lo script utilizzando il comando di php

+0

Come si può fare? Intendi per Nginx? Uso php-fpm su debian – brainsqueezer

+0

È vero che è possibile eseguire lo script usando il comando 'php'. Tuttavia, se vuoi creare uno script eseguibile ('chmod + x yourscript.php') devi aggiungere l'hashbang (#!) Alla prima riga del tuo script. –

5

non c'è bisogno di avere #!/usr/bin/php nel codice, basta eseguire lo script CLI usando php, ad esempio php /path/to/file.php o /usr/bin/php /path/to/file.php.

+0

Ma se si desidera creare uno script eseguibile che può essere eseguito dalla shell, è necessario risolvere questo problema. –

3

Generalmente trovo una buona idea separare la logica dalla presentazione. Quando faccio qualcosa del genere, metto il più possibile in una libreria, e poi scrivo interfacce web e cli separate per esso.

Detto questo, chiamarlo con il comando php è probabilmente una soluzione più semplice.

+1

+1 per la separazione della logica. In genere, la CLI e il Web richiedono interfacce separate (ad esempio interagendo con '$ argv' anziché' $ _GET'). Quindi non è necessario che lo stesso * file * venga chiamato da entrambi. – ircmaxell

17

Ho risolto il problema utilizzando il buffering dell'output. Il mio script ora assomiglia a questo:

#!/usr/bin/php 
<?php 
@ob_end_clean(); 
... 

Nota: Non c'è ?> alla fine del file. Questa è in realtà una buona pratica quando si scrivono script PHP. Ciò impedisce che qualsiasi testo spazzatura venga stampato accidentalmente.

Nota: La documentazione PHP per ob_end_clean() dice che:

Il buffer di uscita deve essere avviato da ob_start() con PHP_OUTPUT_HANDLER_CLEANABLE e le bandiere PHP_OUTPUT_HANDLER_REMOVABLE. In caso contrario, ob_end_clean() non funzionerà.

Sembra che ciò avvenga automaticamente quando PHP viene eseguito dalla riga di comando.

+1

Soluzione molto bella! Funziona, grazie !!! – CDR

+1

Ti serve anche un 'ob_start();'? Probabilmente vale la pena menzionarlo. – Floris

+0

Penso che tu possa contrassegnare questa risposta come accettata (già 5+ anni) :-) –

-1

La soluzione di buffer di uscita sopra è un hack. Non farlo.

prima cosa, in realtà si sta meglio utilizza il comando env per determinare quale PHP è utilizzato:

#!/usr/bin/env php 

Poi dare il permesso di essere eseguito da solo:

chmod +x myfile 

Così, invece di chiamando 'php myfile', ora esegui:

./myfile 

Da quella cartella. Spero che questo ti aiuti!