簡體   English   中英

使用執行位運行CLI php腳本

[英]Running CLI php script with execute bit

這一直困擾着我。

我知道你能做到

php foo.php

要么

php -f foo.php

有沒有辦法只啟動執行位設置的腳本

./foo.php

鑒於以下內容:

#!/usr/bin/php

<?php 
exit('hello');

我得到“無法打開輸入文件”或“錯誤的解釋器:沒有這樣的文件或目錄”取決於“bin / php”之后是否有空格。

而不是#!/usr/bin/php ,使用#!/usr/bin/env php是一個更好的解決方案。 這將在PATH環境變量中查找PHP二進制文件。 這是更為強大的跨平台和。 例如,BSD在/usr/local/bin/php安裝PHP。

此外,您需要確保這是第一行,並且腳本具有可執行位設置,為每個人設置它(通常可以)使用: chmod a+x script.php

還要確保已啟用CLI SAPI。 運行php -v top verify,它應該顯示如下:

[~]% php -v
PHP 5.3.3 (cli) (built: Jul 22 2010 16:21:30)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
  1. 檢查“#!”之前是否沒有任何內容,就像UTF-8 BOM一樣
  2. 檢查行尾是否有任何內容,例如CR(\\ r)到最后的LF(\\ n)。 如果您在Windows中使用Windows行結尾(CR LF)編寫文件,則CR會轉到此處,並且可能會被解釋為解釋器路徑的一部分。

您給出的示例代碼似乎沒問題,對我有用(我添加了結束?>但是)

如果您可以使用/usr/bin/php foo.php運行該文件,那/usr/bin/php foo.php發生一些奇怪的事情。 只是一個瘋狂的猜測,但也許你的文本編輯器在文件的開頭留下BOM(字節順序標記),以便#! 不是該文件中的前兩個字節。 (你可以通過做hexdump -C foo.php | head找出來)

php(1)頁:

提示

您可以使用shebang行自動從腳本調用php。 只有CLI版本的PHP會忽略這樣的第一行,如下所示:

 #!/bin/php <?php // your script ?> 

所以,shebang方法確實有效。 如果我在Vim中將行結尾設置為“unix”之外的其他內容,我會收到“:沒有這樣的文件或目錄”。 你在腳本中使用DOS行結尾嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM