在PHP CLI脚本参数中传递路径

时间:2013-08-13 19:51:48

标签: php command-line-interface

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

2 个答案:

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

?>

答案 1 :(得分:0)

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