我有PHP文件,我想用“arguments”执行.exe并将输出放在文本文件中。
当我从windows cmd完成这项工作时,它成功运作。
但是,当我在PHP中执行此任务时,文本文件为空。我不知道执行是否有效,但文件是空的。
这是在windows cmd中运行的命令行:
cd C:\inetpub\wwwroot\webclient\db\nucleotide
blastdbcmd -entry $gi -db $DatabaseName -outfmt %f -out $text_files_path\result.txt
blastdbcmd
是执行文件"blastdbcmd .exe"
。 result.txt
已成功创建该命令的所有结果。
这是我的PHP代码: 第一个代码:
$gi = 1000232109;
$cmd = "-entry $gi -db $DatabaseName -outfmt %f";
exec("C:\inetpub\wwwroot\webclient\db\nucleotide\blastdbcmd.exe $cmd" , &$output, &$return_var);
file_put_contents("$text_files_path/result.txt", $output); //result.txt created
echo $return_var; // 1 is printed
第二段代码:
$handle = popen('C:/inetpub/wwwroot/webclient/db/nucleotide/blastdbcmd.exe 2>&1', 'w');
$cmd = "-entry $gi -db $DatabaseName -outfmt %f";
exec("$cmd" , $output);
file_put_contents("$text_files_path/mm.txt", $output); //result.txt created
echo "hello";
pclose($handle);
第3段代码:
exec("C:\inetpub\wwwroot\webclient\db\nucleotide\blastdbcmd.exe -db nr -entry $gi -outfmt %f -out $text_files_path/result.txt 2>&1"); //result.txt doesn't created
第4段代码:
exec("cd C:\inetpub\wwwroot\webclient\db\nucleotide && blastdbcmd.exe -db nr -entry $gi -outfmt %f -out $text_files_path/result.txt 2>&1"); //result.txt doesn't created
第5段代码:
exec("C:\\Windows\\System32\\cmd.exe /c \"C:\inetpub\wwwroot\webclient\db\nucleotide\blastdbcmd.exe -entry $gi -db $DatabaseName -outfmt %f -out $text_files_path\result.txt\" 2>&1"); //result.txt doesn't created
编辑1: 我测试了这个:
$cmd = "-entry $gi -db $DatabaseName -outfmt %f";
exec("C:\inetpub\wwwroot\webclient\db\nucleotide\blastdbcmd.exe $cmd" , &$out, &$return_var);
$output = "";
echo $out; // "Array" is printed
foreach ($out as $line) {
echo $out; // nothing printed
echo $line; // nothing printed
$output .= $line;
}
file_put_contents("$text_files_path/result.txt", $output);
echo $return_var // 1 is printed
但结果文件为空。
我解决了这个问题:)
exec("cd C:\\inetpub\\wwwroot\\webclient\\db\\nucleotide && blastdbcmd.exe -entry $gi -db $DatabaseName -outfmt %f 2>&1",&$out, &$return_var);
只需将\
替换为\\
感谢@budwiser的“foreach声明” 谢谢大家。
答案 0 :(得分:0)
请注意$ out是一个数组:
exec("yourcommand.exe", $out);
$output = "";
foreach ($out as $line) {
$output .= $line;
}
file_put_contents("C:\\Users\\MyUser\\Documents\\result.txt", $output);
修改强>
更改
exec("C:\inetpub\wwwroot\webclient\db\nucleotide\blastdbcmd.exe $cmd",
&$out, &$return_var);
到
exec("C:\inetpub\wwwroot\webclient\db\nucleotide\blastdbcmd.exe $cmd 2>&1",
&$out, &$return_var);