Desidero che gli script PHP vengano eseguiti sia su riga di comando che sul sito Web (utilizzo Apache e Nginx), quindi inserisco #!/Usr/bin/php nella prima riga dei miei script ma appare sul sito Web ...Come posso evitare di mostrare "#!/Usr/bin/php" su PHP?
risposta
chiamare lo script utilizzando il comando di php
Come si può fare? Intendi per Nginx? Uso php-fpm su debian – brainsqueezer
È 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. –
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
.
Ma se si desidera creare uno script eseguibile che può essere eseguito dalla shell, è necessario risolvere questo problema. –
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 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
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.
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!
Se usi già apache per servire PHP, configura nginx come proxy inverso per apache. – Qwerty