PHP exec() 和路径中的空格

标签 php path exec

我正在 PHP 应用程序中执行以下操作:

  $source = '/home/user/file.ext';
  $output_dir = $this->setOutputString();

  chdir('/home/ben/xc/phplib/bgwatcher-2011a/a01/');
  exec('php bin/createjob.php $source $output_dir', $output);

  return $output[0];

问题是这样的:我可以控制 $source,但不能控制 $output_dir,它是遗留的 Windows 文件系统,路径中有空格。一个示例 $output_dir 是:

/home/vol1/district id/store id/this_is_the_file.html

将输出字符串插入exec()函数时,我都试过了:

addslashes($output_dir)'"' . $output_dir . '"' 转义整个输出字符串。在第一种情况下,路径被连接到:

/home/vol1/districtthis_is_the_file.html

...第一个空格和文件名之间的所有内容都被删除。在第二种情况下,exec() 似乎扔了一只鞋并且没有正确执行 - 不幸的是,错误消息在机器中丢失了 - 如果绝对必要,我可以提供它,但我'也在时间限制下寻找解决方案。

这里的解决方案是什么? sprintf() exec() 的整个字符串吗?我很困惑为什么 addslashes 不能正常工作以转义空格,我认为它与 exec() 的清理有关,但我找不到任何文档来说明备份它。

更新:我试过 escapeshellarg() 和 preg_replace() 但没有成功。进一步考虑这个问题,我是否需要双重逃避路径?或者转义路径和命令?如果 exec() 对路径进行了一次转义,并且在执行命令之前由 PHP 进行了一次转义,那么我是否需要考虑这两次转义?或者这不是它的工作原理?

最佳答案

我不相信 addslashes() 对空格有任何作用。 escapeshellarg() 可能是您想要的。 Docs on escapeshellarg

关于PHP exec() 和路径中的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5489613/

相关文章:

php - Joomla密码被破解

php - 在按值分配的情况下,codeigniter 中的事件记录

node.js - Node 看不到包,路径错误

node.js - Node zip 文件夹路径错误

java - 运行时Exec改变路径

python - 使用 `exec` 调用时如何更新局部变量?

php - Illuminate\Contracts\Filesystem\Factory 不可实例化

php - 使用另一个数据库表中的信息连接到数据库?

javascript - 在流 CSS 中指定相对路径的正确方法是什么?

bash - 如果其中一个文件失败,如何退出 find -exec