我编写了一个网页,当按下该网页时,该网页将一个get请求发送到PHP脚本。 PHP脚本创建一个名为asdf.txt的文件。目前,我在2个不同的服务器上都有此代码,其中之一是Heroku。在Heroku上,此代码可以正常工作:创建了一个名为asdf.txt的新文件。但是,在另一台服务器(我要在上面放置此代码的服务器)上,这不起作用。但是,HTML页面上没有错误消息。
理想情况下,我想对如何进行调试提出一些建议。如果有什么具体的想法请告诉我,但是我也对解决这个问题的任何方式都感兴趣。感谢您的宝贵时间。
这是PHP
<?php
system('echo asdf > asdf.txt', $retval);
?>
这是HTML
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.6/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.6/react-dom.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.23/browser.js"></script>
</head>
<body>
<div id="root"></div>
<script type="text/babel">
class NameForm extends React.Component {
constructor(props) {
super(props);
this.handleSubmit = this.handleSubmit.bind(this)
}
handleSubmit(){
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() {
}.bind(this)
xmlHttp.open("GET","test.php",true)
xmlHttp.send(null)
event.preventDefault()
}
render(){
return (
<div style={{fontSize: 30}}>
<form onSubmit={this.handleSubmit}><input style={{fontSize: 30}} type="submit" value="Submit"/></form>
</div>
)
}
}
ReactDOM.render(
<NameForm />,
document.getElementById('root')
);
</script>
</body>
答案 0 :(得分:0)
在PHP中,有时system()
,exec()
和他们的朋友没有给我们任何错误消息。甚至我们将display_erros
设置为On
。作为一种解决方法,我建议您创建如下的自定义帮助函数:
function my_exec($cmd, $input=''){
$proc=proc_open($cmd, array(0=>array('pipe', 'r'), 1=>array('pipe', 'w'), 2=>array('pipe', 'w')), $pipes);
fwrite($pipes[0], $input);fclose($pipes[0]);
$stdout=stream_get_contents($pipes[1]);fclose($pipes[1]);
$stderr=stream_get_contents($pipes[2]);fclose($pipes[2]);
$rtn=proc_close($proc);
return array('stdout'=>$stdout,
'stderr'=>$stderr,
'return'=>$rtn
);
}
var_export(my_exec('echo asdf > asdf.txt'));
我从http://php.net/manual/en/function.system.php#94929
获得了这些脚本然后,您可以在浏览器“网络检查器”中检查结果。但是在指导您之前,我认为您的handleSubmit()
函数存在问题。我相信它不会正确执行preventDefault()
。因为我们使用的是React,默认情况下它将具有“合成事件”。我相信要正确地preventDefault()
,我们应该做到:
handleSubmit(event){
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() {
}.bind(this)
xmlHttp.open("GET","test.php",true)
xmlHttp.send(null)
event.nativeEvent.preventDefault();//This is how we really preventDefault() the native event, instead synthetic event
}
然后,在单击“提交”之后,您应该能够检查来自PHP脚本的响应。
我建议将my_exec()
用作调试的辅助函数。一旦感觉到它可以正常工作,请将其替换为system()
或exec()
或您喜欢的任何东西。