proc_open() fires twice

时间:2018-10-23 作者:geohei

WordPress帖子应该处理样本数据(上传为PDF文件),并在下面的同一帖子上显示数据(经过一些操作和重新格式化)。

...
<form action="" method="post" enctype="multipart/form-data">
    <input type="file" name="filepdf" />
    <input type="submit" name="submit" value="Upload data samples (.pdf file)" />
</form>
...
我使用PHP code snippets (Insert PHP) 包含PHP代码的插件。

...
[insert_php]
    if(isset($_FILES[\'filepdf\'])) {
        $mTime = number_format(microtime(true), 3, \'.\', \'\');
        $file_name = $_FILES[\'filepdf\'][\'name\'];
        $file_size = $_FILES[\'filepdf\'][\'size\'];
        $file_tmp = $_FILES[\'filepdf\'][\'tmp_name\'];
        $file_ext = strtolower(end(explode(\'.\', $_FILES[\'filepdf\'][\'name\'])));
...
        $cmd = "./mybinary \'$file_name\'";
            $outfile = tempnam("/tmp", "cmd");
            $errfile = tempnam("/tmp", "cmd");
            $descriptorspec = array(
                0 => array("pipe", "r"),
                1 => array("file", $outfile, "w"),
                2 => array("file", $errfile, "w")
            );
            move_uploaded_file($file_tmp, $file_name);
            $proc = proc_open($cmd, $descriptorspec, $pipes);
...
[/insert_php]
几个小时的故障排除,但我不知道为什么会发生这种情况。。。当我上传PDF文件时,二进制文件mybinary 在proc\\u open()中,有时会触发两次(间隔+/-200 ms)。假设95%的请求工作正常,但有5%由于这些双重触发器而失败。似乎(?)使用Chrome的移动Android设备比其他操作系统和/或浏览器受到的影响更大(但对此并不确定)。这至少是Apache的访问权限。日志显示。目前的情况是不可接受的,因为二进制文件使用PHP代码生成的毫秒时间代码(见上文),这会打乱整个过程。

问题:
1。Chrome发送两个请求,我的假设正确吗
2。如果是,为什么
3。我怎样才能避免呢?

我在google上搜索了一下,确实,proc\\u open()有时会触发两次,但我没有找到任何解决方案。

此外,我不知道这是否与WordPress相关,或者是PHP主题。

1 个回复
SO网友:geohei

要完成此操作。。。我最初使用PHP代码段(插入PHP)插件(版本2.0.6-最新)。php页面实际上只被调用了一次,但执行了两次。我对上面描述的所有这些都没有任何解释(相同的临时文件名,但代码调用了两次,…)。

在我将PHP代码WordPress集成方法更改为Shortcode概念后,一切都很好(到目前为止)。所以我相信这个插件是双重触发的原因?!

没有双击-我从一开始就已经检查过了。因此,PHP代码本身可能不是罪魁祸首。

结束