【发布时间】:2013-08-13 19:51:48
【问题描述】:
我正在编写一个 php CLI 脚本,该脚本接受路径等参数。
所以一个例子是:
php myscript.php -p=/Volumes/Macintosh HD/Users/andrea/samples
脚本有自己的方法来红色参数,它正确地获取 -p 的值,将它设置在一个名为 $project_path 的变量中。
但是,当我使用 isdir($project_path) 测试文件夹时,它返回 false。
我尝试以不同的方式传递路径:
- /Volumes/Macintosh\HD/Users/andrea/samples
- '/Volumes/Macintosh HD/Users/andrea/samples'
- “/Volumes/Macintosh HD/Users/andrea/samples”
- '/Volumes/Macintosh\HD/Users/andrea/samples'
- "/Volumes/Macintosh\HD/Users/andrea/samples"
它们都不起作用。 我必须使用什么格式才能使其工作? 请考虑该脚本还必须在不同的操作系统(即 Windows)上运行。
问题是路径参数被自动转义: 我需要摆脱它。 返回的字符串是:
\'/Volumes/Macintosh\HD/Users/andrea/samples\'
【问题讨论】:
-
如果您在变量中硬编码
isdir($project_path)是否有效?对于普通的 shell,任何一个带引号的字符串看起来都很好。传入后的变量内容如何?否则,您可能仍想查看您的 argv 阅读器。 -
您希望能够通过 php 中的
$argv变量访问该参数? -
尝试像
php -f myscript.php -- -p=/Volumes/Macintosh\ HD/Users/andrea/samples这样调用你的脚本。 -- 将告诉 php 可执行文件,它的参数列表已经结束,之后的所有内容都应该传递给 PHP 文件。在 myscript.php 的开头执行var_dump($argv); exit();并检查脚本中的内容。如果 $argv 的索引 1 是-p=/Volumes/Macintosh\ HD/Users/andrea/samples你很好。 -
@TsanyoTsanev:问题不在于如何阅读参数:请参阅我的更新。
-
@mario:你是对的。我没有注意到该字符串实际上被转义为 \'/Volumes/Macintosh\\HD/Users/andrea/samples\' 我不知道如何取消转义。
标签: php command-line-interface