2012-01-05 17 views
20

Thông thường khi tôi nhìn thấy PHP mà có nghĩa là để được chạy từ dòng lệnh, nó sẽ có dòng này #!/usr/bin/env php ở phía trên cùng của tập tin như thế này ...Là #!/Usr/bin/env cần thiết để chạy PHP từ dòng lệnh?

#!/usr/bin/env php 
<?php 
    // code 
?> 

tôi muốn biết nếu điều này có nghĩa là chỉ khi tập tin được chạy trên một hệ thống Linux/Unix hoặc là cần thiết để chạy trên Windows là tốt?

+10

Nhân tiện: thực hành tốt là bỏ qua '?>' Trong mã PHP của bạn, nếu nó xuất hiện ở cuối tệp. – Tadeck

+0

@Tadeck yes it is. không bao giờ thêm '?>' trừ khi bạn có lý do chính đáng. – hanshenrik

Trả lời

22

Dòng "hashbang" là bắt buộc để tự động phát hiện loại tập lệnh. Nó cho phép loại này sử dụng:

[pfisher ~]$ chmod +x run-me.php 
[pfisher ~]$ run-me.php 

dòng đó là không cần thiết nếu bạn vượt qua các tên tập tin như một cuộc tranh cãi với người phiên dịch php, như vậy:

[pfisher ~]$ php run-me.php 
+3

Tất nhiên, điều này chỉ hoạt động trên * nix. Trên cửa sổ, bạn phải sử dụng '> php run-me.php' từ dòng lệnh. – ThatOtherPerson

+3

Cũng đáng nói là, nhờ vào dòng này bạn có thể đổi tên tập tin kịch bản để nó không chứa phần mở rộng. Bằng cách này bạn sẽ có thể thực thi nó mà không biết nó là gì: './Run-me'. – Tadeck

+1

@ThatOtherPerson, Windows có phiên bản riêng: http://stackoverflow.com/a/6818266/632951 – Pacerier

1

Không không, bạn có thể trực tiếp sử dụng

Chạy php (hoặc bất kỳ thứ gì khác) thông qua tiện ích env là biện pháp bảo mật yếu. Dpending trên nền tảng này, sẽ "sửa" PATH, LIB và các biến môi trường khác theo các tệp cấu hình khác nhau và có khả năng xóa một số giá trị nguy hiểm trong đó (ví dụ: env trên HPUX).

Nó cũng giới hạn phạm vi mở rộng vỏ trên một số môi trường nhất định. (Xem người đàn ông 1 env trên Linux).

+4

'#!/Usr/bin/env php' cũng được sử dụng vì' #!/Path/to/php' là khác nhau trên các hệ thống khác nhau, phải không? – Tadeck

+0

Không, '/ usr/bin/env' không làm gì cả - tất cả những gì bạn làm trong shebang là tìm kiếm php (hoặc bất kỳ thứ gì) trên' $ PATH' của bạn, để đối phó với các hệ thống mà thông dịch viên là một nơi nào đó kỳ lạ như '/ usr/local/bin'. – duskwuff

+0

thực sự nó làm chính xác những gì tôi đã nói trong câu trả lời của tôi. hãy đọc các trang hướng dẫn sử dụng trên các hệ thống đó. –

Các vấn đề liên quan