2011-08-02 159 views
2

這已經讓我略微感到困擾。運行CLI php腳本執行位

我知道你能做到

php foo.php 

php -f foo.php 

有沒有辦法只是啓動與執行位腳本設置

./foo.php 

考慮如下因素:

#!/usr/bin/php 

<?php 
exit('hello'); 

根據「bin/php」後面是否有空格,我得到「無法打開輸入文件」或「錯誤的解釋器:沒有這樣的文件或目錄」。

+0

你有php在/ usr/bin/php嗎? – Subdigger

+0

@Subdigger是的。這對你有用嗎?我不知道我是否試圖強迫它做一些不該做的事情。 – Greg

回答

3

你給出的示例代碼似乎確定,對我的作品(我加的收盤?>雖然)

如果可以運行該文件與/usr/bin/php foo.php有事情很奇怪。只是一個瘋狂的猜測,但也許你的文本編輯器在文件的開頭留下一個BOM(字節順序標記),以便#!不是該文件中的前兩個字節。 (你可以在這裏找到hexdump -C foo.php | head

+0

這是BOM!謝謝! – Greg

7

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

此外,您將需要確保這是第一線,並且該腳本具有可執行位設置,將其設置爲每個人(一般正常)使用方法:chmod a+x script.php

另外,還要確保你啓用CLI SAPI。運行php -v頂部驗證,它應該顯示是這樣的:

[~]% 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 
2

php(1)手冊頁:

TIPS

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

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

所以,認領方法確實可行。如果我在Vim中設置了行結尾而不是「unix」,我會得到「:沒有這樣的文件或目錄」。你在腳本中使用DOS行結束符?

5
  1. 檢查,如果你有什麼之前「#!」,像一個UTF-8 BOM
  2. 檢查,如果你不在行到底有什麼,就像CR(\ r)以前生產的最終LF(\ n)。如果您使用Windows行結尾(CR LF)在Windows中編寫文件並且可能會將其解釋爲解釋器路徑的一部分,則CR會到達那裏。
+1

好抓!謝謝。 – Greg