fwrite错误 - 快速写入串行输出的问题

时间:2015-10-07 22:53:03

标签: javascript php ajax fopen

首先,如果此问题已经发布,我很抱歉,我无法在任何地方找到答案。

我正在写一个单页网站,它使用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);
?>

0 个答案:

没有答案