我正在开发一个 Qt 应用程序,需要在其中执行 PHP 脚本。尽管 PHP 文件与项目文件位于同一目录中,但在尝试使用
QProcess
运行脚本时收到错误。这是导致问题的代码片段:
this->getMined.start("php", QStringList() << "get_cexio_BTC.php");
this->getMined.waitForFinished();
QByteArray output = getMined.readAll();
当我运行应用程序时,出现以下错误:
Could not open input file: get_cexio_BTC.php
我在
QProcess
设置中是否忽略了某些可能导致此文件路径问题的内容?
因此,如果在路径中找不到
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 的项目设置 > 运行 > 工作目录进行更改。
如果您还没有这样做,请务必在
QProcess
实例没有执行您希望它执行的操作时检查/打印出该实例的错误字符串。
qDebug() << "error string?" << myProcess.errorString();
并确保您知道在适当的情况下使用正斜杠和引号。如果您有未加引号的命令行参数/文件名,它可能会将您的路径中的空格视为另一个要处理的选项。
最后,如果您使用的是 Windows 8 并且正在访问网络驱动器上的某些内容,则必须运行 net use 命令才能从命令行访问这些路径,即使它们已映射并在 Windows 资源管理器中工作。
希望有帮助。
您可以使用 QNetworkAccessManager 访问本地主机上的页面来触发包含的 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));