即使路径中有WP-CLI,也会出现“无法打开输入文件”错误

时间:2019-06-16 作者:Hashim Aziz

我正在使用XAMPP本地开发Wordpress,目前正在尝试安装WP-CLI工具as described here 使用Cygwin。

我重命名了wp-cli.pharwp, 使其可执行并将其移动到XAMPP/php 文件夹

但是,运行wp 告诉我错误:

无法打开输入文件:/cygdrive/b/Users/User/Desktop/XAMPP/php/wp

另一方面./wp 从文件所在的目录运行程序,不会出现问题。

尽管事实上/cygdrive/b/Users/User/Desktop/XAMPP/php/cygdrive/b/Users/User/Desktop/XAMPP/php/wp 在我的路上,通过Cygwin的~/.bash_profile 文件

这通过以下操作得到证实which php:

/cygdrive/b/Users/User/Desktop/XAMPP/php/php
。。。和which wp:

/cygdrive/b/Users/User/Desktop/XAMPP/php/wp
What could be causing this problem?

2 个回复
最合适的回答,由SO网友:Hashim Aziz 整理而成

我最终设法从不同的来源收集了足够的信息来解决这个问题,因为——正如我越来越多地发现与Wordpress开发相关的东西一样——文档是如此的不足。

为了让一个官方命令行实用程序在一个它声称支持的平台上工作,我花费了这么多的研究和黑客技术,这一事实是荒谬的,而我对Wordpress项目和Automatic团队的估计在过去几周中由于这些原因大幅下降。

下面的回答改编自aefxx\'s answer hereleymannx\'s answer 对这个问题。

据我所知,这里的问题是php.exe - XAMPP、WAMP和类似的本地服务器中包含的PHP二进制文件是一个Windows二进制文件,它只理解Windows格式的路径。正如aefxx在他的回答中所编码的那样,解决方案是使用一个包装器脚本来检查传递给PHP二进制文件的Unix风格路径,并将其转换为它可以理解的Windows路径。

请注意,由于此解决方案是作为PHP二进制文件本身的包装器实现的,因此对于在Cygwin下运行的任何PHP程序,而不仅仅是WP-CLI,都应该能够解决此问题。

如何使WP-CLI与Cygwin一起工作

Remember to replace any paths below with your own.

下载wp cli后。phar文件并使其可执行as detailed in the documentation, 将其重命名为时,将其移动到服务器的PHP目录wp:

mv /cygdrive/b/Users/User/Desktop/XAMPP/php/wp
在PHP目录中,运行以下操作:

touch php
chmod +x ./php
这将创建一个名为php 并使其可执行。此文件将用作包装器脚本。在文本编辑器中打开文件并将以下内容粘贴到其中,将PHP可执行文件的路径替换为您自己的路径:

#!/bin/bash

php="/cygdrive/b/Users/User/Desktop/XAMPP/php/php.exe"

for ((n=1; n <= $#; n++)); do
    if [ -e "${!n}" ]; then
        # Converts Unix style paths to Windows equivalents
        path="$(cygpath --mixed ${!n} | xargs)"

        case 1 in
            $(( n == 1 )) )
                set -- "$path" "${@:$(($n+1))}";;
            $(( n < $# )) )
                set -- "${@:1:$((n-1))}" "$path" ${@:$((n+1)):$#};;
            *)
                set -- "${@:1:$(($#-1))}" "$path";;
        esac
    fi
done

"$php" "$@"
运行cygstart ~/.bash_profile 打开.bash_profile 文件,并在其末尾添加以下内容,以将XAMPP的PHP目录添加到PATH 环境变量:

export PATH="/cygdrive/b/Users/User/Desktop/XAMPP/php:$PATH"
最后,运行source ~/.bash_profile 加载.bash_profile 文件

最后,运行wp 确认WP-CLI现在正在工作。

SO网友:leymannx

至少有两个有趣的问题:

最简单的方法似乎是在Cygwin的~/.bashrc~/.bash_profile:

alias wp="/cygdrive/b/Users/User/XAMPP/php/php /cygdrive/b/Users/User/XAMPP/php/wp"