在HTML中编写一些简单的嵌入式PHP来执行python脚本,该脚本使用一些循环来根据HTML表单中多个文件输入的可能性多次运行脚本.它适用于单数,但就目前而言,当运行多个文件时,它似乎重复一些,并且仔细检查,似乎第一次被python脚本收到的变量不正确.我不知道它为什么这样做,它可能是非常明显的.所有帮助赞赏.
$len = count($_FILES["inputFile"]["name"]); echo "length"; echo $len; for($i = 0; $i <$len; $i++){ $dataIn = $_FILES["inputFile"]["tmp_name"][$i]; $originalName = $_FILES["inputFile"]["name"][$i]; echo "TMP Name:"; echo $dataIn; echo "OriginalName"; echo $originalName; exec("python /home/will/public_html/OrderAnalyser.py '$dataIn' '$originalName' 2>&1",$output); foreach ($output as $out){ echo $out; echo "
"; } }
输出如下所示:
Executing... length2TMP Name:/var/www/tmp/phpHzJFtQOriginalNamemicro_b001.jsonAnalysis Starting on file: Input File: /var/www/tmp/phpHzJFtQ Original Name: micro_b001.json "nodeID":20, firstNode: 20 Finished Finding Argument Order, List is as follows: ['20', '21', '22', '23', '24'] Top Node is: 24 There is NO subargument of node: 24 Analysis Complete TMP Name:/var/www/tmp/php9vQumSOriginalNamemicro_b002.jsonAnalysis Starting on file: Input File: /var/www/tmp/phpHzJFtQ Original Name: micro_b001.json "nodeID":20, firstNode: 20 Finished Finding Argument Order, List is as follows: ['20', '21', '22', '23', '24'] Top Node is: 24 There is NO subargument of node: 24 Analysis Complete Analysis Starting on file: Input File: /var/www/tmp/php9vQumS Original Name: micro_b002.json "nodeID":20, firstNode: 20 Finished Finding Argument Order, List is as follows: ['20', '21', '22', '23', '24'] Top Node is: 22 20 is child of 22 21 is child of 22 Subargument of node: 22 is: Post Order There is NO subargument of node: 20 There is NO subargument of node: 21 Analysis Complete Completed...
从这里可以看出,一旦它完成第一个文件(micro_b001.json),它应该移动到micro_b002.PHP中的echo显示PHP中的变量是正确的,但是从python脚本看到的print显示它再次使用初始变量(micro_b001)运行.为什么会这样?正如你所看到的,一旦它由于某种原因再次运行第一个,它实际上正确运行第二个,然后完成.为什么这样做很奇怪?我只是想不出来.
(另外,我意识到这是易受攻击的代码等,现在它并不重要)
(按设计破坏)exec
函数将命令的输出附加到给定数组:
参数
...
output
如果
output
参数存在,那么指定的数组将填充命令的每一行输出.\n
此数组中不包含尾随空格,例如.请注意,如果数组已包含某些元素,exec()
则会追加到数组的末尾.如果您不希望该函数附加元素,请unset()
在将数组传递给它之前调用该数组exec()
.
(强调我的)
因此你的python程序正确执行两次.在第二个循环中,第一个命令的输出仍然存在$output
,第二个命令的输出附加到此.
修复应该是:
unset($output); exec("python /home/will/public_html/OrderAnalyser.py '$dataIn' '$originalName' 2>&1",$output);