2013-01-10 44 views
14

我試圖在OS X山獅安裝PHP CodeSniffer - 我似乎得到一個奇怪的問題PHP CodeSniffer include_once錯誤

當運行「phpcs」我得到以下錯誤:

PHP Warning: include_once(PHP/CodeSniffer/CLI.php): failed to open stream: No such 
file or directory in /usr/lib/php/pear/bin/phpcs on line 31 

PHP Warning: include_once(): Failed opening 'PHP/CodeSniffer/CLI.php' for inclusion 
(include_path='.;/usr/lib/php/pear/share/pear/') in /usr/lib/php/pear/bin/phpcs on line 31 

PHP Fatal error: Class 'PHP_CodeSniffer_CLI' not found in /usr/lib/php/pear/bin/phpcs 
on line 34 

文件/usr/lib/php/pear/share/pear/PHP/CodeSniffer/CLI.php存在,這是混淆了我

+2

是'/ usr/lib中/ PHP /梨/股/梨/'你的PHP默認包括清單? (檢查php.ini) – SDC

回答

1

發現了問題 - 我是使用Windows分離器(分號) include_path而不是Unix(冒號),所以它應該是:

.:/usr/lib/php/pear/share/pear/ 

代替

.;/usr/lib/php/pear/share/pear/ 
+0

恕我直言,這是比其他人更好的答案,只要適當地設置你的包含路徑。 – Cameron

3

當通過Composer使用安裝PHP CodeSniffer我得到這個錯誤。

與固定它:

cd /path/to/app 
rm -rf vendor/ 
composer update 
12

在我的配置PHP /路徑只是沒有地方phpcs預期它。 我通過創建符號鏈接到缺少的路徑來解決它。

去梨目錄,然後運行:

ln -s share/pear/PHP/ PHP 
+0

不是我需要的那個,但讓我找到了解決方案。 Thx – Ing

+1

我的'pear'目錄位於我的用戶文件夾('〜/ pear')中,所以我不得不將它添加到php.ini中的'include_path'。 –

1

如果您正在使用MAMP包括這在你的路徑:

export PATH=/Applications/MAMP/bin/php/php5.X.XX/lib/php:$PATH 

用你的PHP版本替換5.X.XX。在我的情況下,這是:

export PATH=/Applications/MAMP/bin/php/php5.4.26/lib/php:$PATH 
0

在我的情況 - 已經安裝PHP-OSX - 我不得不修復符號鏈接,像這樣:

cd /usr/local/php5/lib/php/PHP 

然後:

ln -s /usr/local/share/pear/PHP/CodeSniffer 
ln -s /usr/local/share/pear/PHP/CodeSniffer.php 
5

這也許不是最好的解決方案,但它不需要改變你的道路或其他任何東西。 在文件phpcs你會發現一個部分:

if (is_file(dirname(__FILE__).'/../CodeSniffer/CLI.php') === true) { 
    include_once dirname(__FILE__).'/../CodeSniffer/CLI.php'; 
else { 
    include_once 'PHP/CodeSniffer/CLI.php'; 
} 

只需添加一個新否則,如果你的路徑正確的文件CLI.php(即「在/ usr /本地/梨/股/梨/ PHP /CodeSniffer/CLI.php'):

if (is_file(dirname(__FILE__).'/../CodeSniffer/CLI.php') === true) { 
    include_once dirname(__FILE__).'/../CodeSniffer/CLI.php'; 
} else if (is_file('/usr/local/pear/share/pear/PHP/CodeSniffer/CLI.php')) { 
    include_once '/usr/local/pear/share/pear/PHP/CodeSniffer/CLI.php'; 
} else { 
    include_once 'PHP/CodeSniffer/CLI.php'; 
} 

最後但並非最不重要的文檔這種變化更高版本和更新。 最終,解決方案必須是PHPCS的開發人員爲尋找CLI提供更堅實的構造.php

+0

我喜歡這種解決方案:)。謝謝先生,你救了我的一天。 –

0

爲了什麼值得,我使用自制軟件(OS X)安裝了PHP。首次安裝是5.6.3,但隨着時間的推移升級。默認的ini文件,你可以找到文件的位置:

php -i | grep ini 

在OSX - 仍然有路徑引用到5.6.3。當我更新這些 - 特別是包含路徑時,所有工作都很好;不需要符號鏈接。

0

D:\wamp\bin\php\php_VERSION\phpcs修改爲我工作的WAMP

if (is_file(dirname(__FILE__).'/../CodeSniffer/CLI.php') === true) { 
    include_once dirname(__FILE__).'/../CodeSniffer/CLI.php'; 
} else if (is_file(dirname(__FILE__).'/pear/PHP/CodeSniffer/CLI.php') === true) { 
    include_once dirname(__FILE__).'/pear/PHP/CodeSniffer/CLI.php'; 
} else { 
    include_once 'PHP/CodeSniffer/CLI.php'; 
} 

$cli = new PHP_CodeSniffer_CLI(); 
$cli->runphpcs(); 
0

我有這個問題,試圖運行phpcs作爲非特權用戶,通過PEAR安裝它,作爲root用戶。

修復對我來說是改變權限,使非特權用戶可以訪問的依賴關係:

chmod -R o+rx /usr/local/lib/php/