首先,如果此问题已经发布,我很抱歉,我无法在任何地方找到答案。
我正在写一个单页网站,它使用JavaScript,Ajax和PHP来接受按键并通过串口发送出去。 我正在EasyPHP和WAMP上测试它,我还没有在Linux服务器上进行测试。
我的问题是,当快速按下按键时,我会收到以下错误。 警告:fopen(com4):无法打开流:第7行的\ keypresstest.php中的权限被拒绝
如果我慢慢地按键,大约500毫秒间隔,一切正常。
此外,在上面的错误之后,PHP没有设置我的$ fp变量,所以它也返回错误: 警告:fwrite()期望参数1是资源,第9行的\ keypresstest.php中给出了boolean 警告:fclose()要求参数1为资源,第10行的\ keypresstest.php中给出布尔值
我认为串口资源缓慢'释放',它被定义为'资源ID#3',如果我能够提高速度,或者在需要时产生另一个实例,我可以解决问题。 我希望读这篇文章的人可能有一些建议。
我的代码如下,我删除了一些组件以保持此代码更简洁
HTML文件
<script> <!-- call php script here -->
function sendKey(str) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById("txtHint").innerHTML = document.getElementById("txtHint").innerHTML + xmlhttp.responseText;
}
}
xmlhttp.open("GET", "keypresstest.php?q=" + str, true);
xmlhttp.send();
}
</script>
<script> // page js key listener script
document.addEventListener('keydown', function(event) { // things happen as keys are pressed
if (!arrayContainsCheck(keysHeld, event.keyCode)) { // check if the key is already being held, this is so keydown events don't continue to propagate whilst a key is held
if(event.keyCode == 38 || event.keyCode == 87) { // up/w keys, send output to php script "f"
sendKey("f");
} keysHeld.push(event.keyCode);
}
});
document.addEventListener('keyup', function(event) {
document.getElementById("lightSwitch").style.backgroundColor = "blue";
if(event.keyCode == 38 || event.keyCode == 87) { // up/w keys, send output to php script "g"
document.getElementById("upArrow").style.border = "1px solid red";
sendKey("g");
}
keyRelease(keysHeld, event.keyCode);
});
</script>
PHP文件
<?php
$q = $_REQUEST["q"]; // get the q parameter from URL
// Output q parameter to com4 serial port
echo "q is $q <br />";
echo "defining fp... <br />";
$fp = fopen("com4", "w");
echo "fp defined as " . $fp . " .<br />";
fwrite($fp, $q);
fclose($fp);
?>