PHP CodeSniffer include_once错误

时间:2013-01-10 11:46:06

标签: php macos codesniffer

我正在尝试在OS X Mountain Lion上安装PHP CodeSniffer - 我似乎遇到了一个奇怪的问题

运行'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存在,令我感到困惑

11 个答案:

答案 0 :(得分:12)

在我的配置上,PHP /路径并不是phpcs所期望的。 我通过创建缺少路径的符号链接来解决它。

转到pear目录并运行:

ln -s share/pear/PHP/ PHP

答案 1 :(得分:6)

这可能不是最好的解决方案,但它不需要改变你的路径或其他任何东西。 在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/local/pear/share/pear/PHP/CodeSniffer/CLI.php'),只需添加一个新的else:

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做了更坚实的构造

答案 2 :(得分:5)

使用通过Composer安装的PHP CodeSniffer时出现此错误。

修正了:

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

答案 3 :(得分:1)

如果您正在使用MAMP,请在您的路径中包含此内容:

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

将5.X.XX替换为您的php版本。就我而言,这是:

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

答案 4 :(得分:1)

卸载它并使用composer重新安装

alias php=/Applications/MAMP/bin/php/php5.6.10/bin/php;
composer global require "squizlabs/php_codesniffer=*";

来源:https://tommcfarlin.com/php-codesniffer-with-composer/

答案 5 :(得分:0)

发现问题 - 我在include_path而不是Unix one(冒号)中使用Windows分隔符(分号),所以应该是:

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

而不是

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

答案 6 :(得分: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

答案 7 :(得分:0)

为了它的价值,我使用自制软件(OS X)安装了PHP。首次安装是5.6.3,但随着时间的推移升级。默认的ini文件,您可以使用以下命令查找文件的位置:

php -i | grep ini
osx上的

- 仍然有对5.6.3的路径引用。当我更新这些 - 特别是包含路径时,所有工作都很好;不需要符号链接。

答案 8 :(得分: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();

答案 9 :(得分:0)

我有这个问题尝试将phpcs作为非特权用户运行,并通过PEAR以root身份安装它。

修复我的方法是更改​​权限,以便非特权用户可以访问依赖项:

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

答案 10 :(得分:0)

我通过将正确的路径添加到PHP扫描INI文件的其他目录(它在phpinfo.php中列出)来解决它。从终端执行这三个命令:

sudo mkdir -p /Library/Server/Web/Config/php

sudo touch /Library/Server/Web/Config/php/local.ini

echo 'include_path = ".:'`pear config-get php_dir`'"' | sudo tee -a /Library/Server/Web/Config/php/local.ini