我正在编写一个php CLI脚本,除其他参数外,还接受一个路径。
所以一个例子是:
php myscript.php -p=/Volumes/Macintosh HD/Users/andrea/samples
脚本有自己的方式来重写参数,并且正确获取-p的值,将其设置在名为$ project_path的变量中。
但是,当我使用isdir($ project_path)测试文件夹时,它返回false。
我试图以不同的方式传递路径:
不是他们的作品。 我必须使用什么格式才能使它工作? 请考虑该脚本还必须适用于不同的操作系统(即Windows)。
问题是路径参数是自动转义的: 我需要揭开它。 返回的字符串是:
\'/ Volumes / Macintosh \ HD / Users / andrea / samples \'
答案 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 );
来删除包装引号。