如何在Qt中执行php脚本?

时间:2014-04-15 15:40:01

标签: php qt qprocess

this->getMined.start("php", QStringList() << "get_cexio_BTC.php");
this->getMined.waitForFinished();
QByteArray output = getMined.readAll();

输出:“无法打开输入文件:get_cexio_BTC.php \ n”

项目文件和 get_cexio_BTC.php 位于同一文件夹中。我尝试将完整路径和第一行更改为this->getMined.start("php get_cexio_BTC.php");,但它没有帮助。

2 个答案:

答案 0 :(得分:1)

您可以使用QNetworkAccessManager访问localhost上的页面以触发包含的PHP脚本。

例如,如果你的htdocs目录中有以下php页面:test.php

// test.php
echo("hello world");

您可以访问自己的网页:http://localhost/test.php

QUrl url("http://localhost/test.php");
QNetworkAccessManager nam;
QNetworkReply* reply = nam.get(QNetworkRequest(url));

答案 1 :(得分:1)

因此,如果在路径中找不到php,或者没有加载到QProcess正在使用的环境变量中,则可能会出现类似的错误。

尝试打印出环境变量:

qDebug() << "Process Environment" << myProcess.getProcessEnvironment().toStringList();

如果在PATH变量下,它没有提及php.exe的位置,则会失败。

您可能需要指定php.exe而不仅仅是php。如果找到了正确的,那么当它没有运行任何输入文件时,你应该能够看到php命令的用法语句。

http://www.php.net/manual/en/features.commandline.options.php

如果这不是问题,那么请确保您所在的工作目录中。

system("dir");

qDebug() << "current path" << QDir::currentPath();

您可以在代码中更改当前工作目录,或者为特定流程指定它,或者您可以从Qt的项目设置&gt;更改它。运行&gt;工作目录。

如果您还没有,请确保在QProcess实例未执行您想要的操作时检查/打印出错误字符串。

qDebug() << "error string?" << myProcess.errorString();

并确保您知道在适当的地方使用正斜杠和引号。如果您有一个不带引号的命令行参数/文件名,它可能会在您的路径中看到空格作为另一个要处理的选项。

最后,如果您使用的是Windows 8并且正在访问网络驱动器上的某些内容,则必须运行net use命令才能从命令行访问这些路径,即使它们已映射并在Windows资源管理器中工作也是如此

希望有所帮助。