0

错误问题

已经使用 Emacs 几年了。最近决定尝试 Prelude 版本(链接到 prelude)。安装顺利(在带有 Cygwin 的 Win7 上),但几天来无法使用 php 错误检查。我想让 php 错误检查与 Flycheck 一起工作。它现在对我不起作用。

目前,当我破坏 php 脚本时,flycheck.el (@ln2551)返回 2 个错误:

Checker php returned non-zero exit code 1, but no errors from output: 
Could not open input file: /tmp/flycheck4728Btc/myPhpFile.php

Checker definition probably flawed.
Checker php-phpcs returned non-zero exit code 1, but no errors from output:
Could not open input file: /cygdrive/c/xampp/php/phpcs

Checker definition probably flawed.

调试信息

1)。/tmpFlycheck 在 Cygwin 根目录中写入缓冲区副本。见flycheck.el (@ln800) ):这个文件存在并且是一个确认可读的缓冲区副本;它的文件权限没有问题(无论是 chmod 777 还是 700,都会出现同样的错误)。

2)。Phpcs 位于 c:/xampp/php/phpcs 并且可以从命令行(cmd.exe 和 cygwin bash)调用,无论有无 c:/ 路径;但不适用于 cygdrive 路径。[这不起作用 $/cydrive/c/xampp/php/phpcs -h(带有或不带有 .bat 扩展名)。] 我还确认了 phpcs 的良好安装(并且它可以从命令行工作),并且有这里不是文件权限问题。我已根据flycheck.el @ln2895-2903flychech-phpcs-standard将变量设置为,但没有找到抛出错误的条件。c:/xampp/php/phpcs

[注意:当我尝试重命名 phpcs 文件并指定 phpcs.bat 时,此错误确实消失了,但我不确定是否找到了检查器,因为写入 tmp 文件错误仍然阻碍了任何结果。此外,这打破了我对 phpcs 命令的命令行使用。]

可以肯定的是,这是我的php -v

$ php -v
PHP 5.4.7 (cli) (built: Sep 12 2012 23:48:31)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
    with Xdebug v2.2.1, Copyright (c) 2002-2012, by Derick Rethans

这是我的phpcs版本:

$ phpcs --version
PHP_CodeSniffer version 1.3.3 (stable) by Squiz Pty Ltd. (http://www.squiz.net)

在我的 .bash_profile 中 有这个别名:alias phpcs="c:/xampp/php/phpcs"

c:\xampp\php在我的PATH

研究

我一直在浏览 phpcs、cygwin 和 flycheck.el,包括自定义 flycheck-phpcs-standard 行的说明,但在这个问题上没有任何进展。

我不确定这是否与flycheck.el@800-824 (defun flycheck-temp-file-system (filename prefix)上的评论有关。这些是关于使用 Emacs 解决压缩错误的评论。反正,

如何解决这个问题?

有什么意见或想法可以进一步测试吗?有人用 Cygwin 在 win7 上进行 flycheck 吗?它是操作系统编译问题吗?某处脚本中的目录路径?

4

1 回答 1

0

这不是 flycheck 的错误!

[感谢存储库所有者给我一个明确的答案]。

flycheck-phpcs-standard不走路径phpcs。我错了。一旦我了解到这一点,文档的上下文就更有意义了。

发生的事情是 Cygwin 环境路径安装不是使用 flycheck 时运行的。Phpcs它本身被赋予了一个 unix 类型的路径tmp/flycheck23423.buffer-copy并且不能运行它。臭死我了!

为了响应这个新问题,我试图看看我是否可以让 Windows 读取这些路径。好消息是你当然可以!这个超级用户 QA 很有帮助。

这就是你修复它的方法

1) 将 windows junction 工具下载到 windows 文件夹中,您将在 cmd.exe 中运行它。编辑:见评论,应该在win7中使用mklink。

2) C:\你的\cmd\路径>junction \cygdrive\c \

... this will output ...
Created: C:\cygdrive\c
Targetted at: C:\

3) C:\你的\cmd\路径>junction \tmp C:\cygwin\tmp

... this will output ...
Created: C:\tmp
Targetted at: C:\cygwin\tmp

现在,在 emacs 中打开一个 php 脚本并破坏它。有用!它是 phpcs 能够找到 /tmp/.. 。检查它,并返回错误消息。凉爽的。

于 2013-05-31T17:14:18.543 回答