Tôi muốn các tập lệnh PHP chạy cả trên dòng lệnh và trang web (tôi sử dụng Apache và Nginx) vì vậy tôi đặt #!/Usr/bin/php vào dòng đầu tiên của tập lệnh của tôi nhưng xuất hiện trên trang web ...Làm cách nào để tránh hiển thị "#!/Usr/bin/php" trên PHP?
Trả lời
Gọi kịch bản bằng cách sử dụng lệnh php
Làm thế nào có thể được thực hiện? Bạn có nghĩa là cho Nginx? Tôi sử dụng php-fpm trên debian – brainsqueezer
Đúng là bạn có thể chạy tập lệnh bằng lệnh 'php'. Tuy nhiên, nếu bạn muốn tạo một tập lệnh thực thi ('chmod + x yourscript.php'), bạn cần phải thêm hashbang (#!) Vào dòng đầu tiên của tập lệnh. –
không cần phải có #!/usr/bin/php
trong mã của bạn, chỉ cần chạy CLI kịch bản sử dụng php
, ví dụ php /path/to/file.php
hoặc /usr/bin/php /path/to/file.php
.
Nhưng nếu bạn muốn tạo một tập lệnh thực thi có thể chạy từ trình bao, bạn cần giải quyết vấn đề này. –
Tôi thường tìm thấy ý tưởng hay là tách logic khỏi bản trình bày. Khi tôi làm một cái gì đó như thế này, tôi đặt càng nhiều càng tốt trong một thư viện, và sau đó viết riêng biệt cli và giao diện web cho nó.
Điều đó nói rằng, gọi nó bằng lệnh php có lẽ là một sửa chữa dễ dàng hơn.
+1 để tách logic. Điển hình là CLI và web sẽ yêu cầu các giao diện riêng biệt (tương tác với '$ argv' thay vì' $ _GET' chẳng hạn). Vì vậy, không có nhu cầu thực sự cho cùng một * tập tin * được gọi từ cả hai. – ircmaxell
Tôi đã giải quyết được sự cố khi sử dụng bộ đệm đầu ra. kịch bản của tôi bây giờ trông như thế này:
#!/usr/bin/php
<?php
@ob_end_clean();
...
Lưu ý: Không có ?>
vào cuối của tập tin. Đây thực sự là một thực hành tốt khi viết kịch bản PHP. Điều này ngăn chặn bất kỳ văn bản rác được in vô tình.
Lưu ý: Các tài liệu PHP cho ob_end_clean()
nói rằng:
Bộ đệm đầu ra phải được bắt đầu bởi ob_start() với PHP_OUTPUT_HANDLER_CLEANABLE và cờ PHP_OUTPUT_HANDLER_REMOVABLE. Nếu không ob_end_clean() sẽ không hoạt động.
Dường như việc này được thực hiện tự động khi PHP chạy từ dòng lệnh.
Giải pháp đệm đầu ra ở trên là một bản hack. Đừng làm thế.
Điều đầu tiên, bạn đang thực sự tốt hơn bằng cách sử dụng lệnh env để xác định php đang được sử dụng:
#!/usr/bin/env php
Sau đó cung cấp cho nó cho phép được thực hiện bởi chính nó:
chmod +x myfile
Vì vậy, thay vì gọi 'php myfile', bây giờ bạn chỉ cần chạy:
./myfile
Từ thư mục đó. Hi vọng điêu nay co ich!
Nếu bạn đã sử dụng apache để phục vụ PHP, chỉ cần cấu hình nginx làm proxy ngược cho apache. – Qwerty