2014-04-15 3 views
2
this->getMined.start("php", QStringList() << "get_cexio_BTC.php"); 
this->getMined.waitForFinished(); 
QByteArray output = getMined.readAll(); 

출력 : "입력 파일을 열 수 없습니다 : get_cexio_BTC.php \를 N"Qt에서 PHP 스크립트를 실행하는 방법?

프로젝트 파일과 get_cexio_BTC.php을 같은 폴더에 있습니다. 전체 경로를 넣고 첫 번째 줄을 this->getMined.start("php get_cexio_BTC.php");으로 변경하려고 시도했지만 도움이되지 않았습니다.

답변

1

은 발견되지 경로 또는 QProcess이 사용하는 환경 변수에로드되지 않았 으면 오류가 발생할 수 있습니다. 환경 변수를 인쇄

시도 :

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

PATH 변수 아래는 php.exe의 위치를 ​​언급하지 않는 경우

, 그것은 실패합니다.

php 대신 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에서 매핑되어 작동하더라도) 탐침.

희망이 있습니다.

+0

오류 메시지는 입력 파일에 대해 이야기하기 때문에 * php *에서 온 것 같습니다. 절대 경로가 주어지지 않으므로 실제로 잘못된 작업 디렉토리가 그 이유처럼 보입니다. – hyde

1

QNetworkAccessManager를 사용하여 로컬 호스트의 페이지에 액세스하여 포함 된 PHP 스크립트를 트리거 할 수 있습니다. test.php

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

당신이 당신의 페이지에 액세스 할 수 있습니다 : 당신이 당신의 htdocs에 디렉토리에 다음 PHP 페이지가있는 경우, 예를 들어

그래서 php 경우 http://localhost/test.php

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

감사합니다. _elegant_ 솔루션이 더 있습니까? – TheChosenOne

관련 문제