3

我正在编写一个 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\'

4

2 回答 2

0

简短回答:使用escapeshellarg()

长答案:

chmod +x yourscript.php

-

$path = '/Volumes/Macintosh HD/Users/andrea/samples';
$cmdline = sprintf('/home/user/yourscript.php -p=%s 2>&1', escapeshellarg($path));
$output = shell_exec($cmdline);

示例 cli 脚本:

#!/usr/bin/php
<?php

fwrite(STDOUT, print_r($_SERVER, TRUE));

exit(0); // exit with exit code 0

?>
于 2013-08-13T21:06:05.480 回答
0

我最终使用getopt()来获取未转义的参数(我不知道为什么会有这种差异)并str_replace( array( "'", '"'), '', $file_path );删除包装引号。

于 2013-08-14T18:47:31.217 回答