在 Qt 应用程序中执行 PHP 脚本

问题描述 投票:0回答:2

我正在开发一个 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 c++ qt qprocess
2个回答
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 的项目设置 > 运行 > 工作目录进行更改。

如果您还没有这样做,请务必在

QProcess
实例没有执行您希望它执行的操作时检查/打印出该实例的错误字符串。

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

并确保您知道在适当的情况下使用正斜杠和引号。如果您有未加引号的命令行参数/文件名,它可能会将您的路径中的空格视为另一个要处理的选项。

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

希望有帮助。


1
投票

您可以使用 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));
© www.soinside.com 2019 - 2024. All rights reserved.