【问题标题】:Issue with the command exec on phpphp上的命令exec问题
【发布时间】:2015-07-24 01:23:49
【问题描述】:

我在 php 上使用 exec 时遇到问题,可能我不明白它是如何工作的。

问题是:我想执行一个名为“test.exe”的二进制文件。该程序从输入文件“input.xml”中获取数据并创建一个新文件“output.xml”,并对这些数据进行一些修改。

以下命令行在 windows cmd 上完美运行:

>cd C:\Test
>test.exe C:\XML\example.xml C:\XML\example.out.xml

但是像这样的 php 脚本:

exec('C://Test//test.exe C://XML//example.xml C://XML//example.out.xml');

不像怀疑的那样工作;

每次我在生成的空文件 example.out.xml 旁边找到另一个名为 gmon.out 的文件。

我不知道它是什么类型的文件。这个文件有可能是我问题的根源吗?

有什么想法吗?

【问题讨论】:

  • 脚本是指在浏览器中运行?可能运行网络服务器的用户没有访问输入文件或创建输出文件的权限。此外,在单引号中,我认为您不需要双反斜杠,您可以在 Windows 上使用 / 而不是 `\`。
  • 但是它的窗口,并不是每个人都有权限做所有事情;)
  • @Dagon:很难说。恶意代码、特洛伊木马、病毒等可以,但不是任何事情。
  • @AbraCadaver 是的,在浏览器中。好的,他们都生成一个空文件

标签: php xml cmd exec


【解决方案1】:

您使用了错误的斜杠,您应该使用双反斜杠(一个用于打印,另一个用于转义)。使用// 将被直译为//,因此PHP 将尝试查找C://Test//test.exe 并失败。

更正后的语法是

exec('C:\\Test\\test.exe C:\\XML\\example.xml C:\\XML\\example.out.xml');

exec('C:/Test/test.exe C:/XML/example.xml C:/XML/example.out.xml');

【讨论】:

  • 我都试过了,但问题仍然是一样的,输出被创建了,但 o_O 中仍然没有数据!
  • 也许您正在运行的任何网络服务器(Apache、NGINX、Litespeed、lighttpd)都无法访问这些文件,请确保它们位于服务器可以访问的文件夹中。
  • @AlphaDelta 如何确保 Apache 可以完全访问这些文件?我在 Windows 上使用 Wampserver
  • 我认为最好的办法是将它们放在 C:\wamp\www\
猜你喜欢
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-18
  • 2021-08-05
  • 1970-01-01
  • 2015-05-24
  • 2010-10-30
相关资源
最近更新 更多