shell_exec不使用动态命令


<?php 
    ini_set('max_execution_time', 864000);
    $seq = "D:/Ractip/Sequence.txt";
    $mir = "D:/Ractip/mirhominid.txt";
    $shandle = fopen($seq, 'r');
    $sdata = fread($shandle, filesize($seq));
    $mhandle = fopen($mir, 'r');
    $mdata = fread($mhandle, filesize($mir));
    $sexp = explode(">", $sdata);
    $mexp = explode(">", $mdata);
    $i = 1;
    $a = 1;
    $count = count($sexp);
    while($i < $count)
    {
        $name = explode("n", $mexp[$a]);
        $name = explode(" ", $name[0]);
        $name1 = explode("n", $sexp[$i]);
        $file2 = "D:Ractipmir\"."$name[1]".".txt";
        $file1 = "D:Ractipsequence\"."name1[0]".".txt";
        if ($i == 1){
            mkdir("D:/Ractip/Interactions/"."$name[1]", 0777);
        }
        $file = "D:/Ractip/Interactions/"."$name[1]"."/"."$name1[0]"."+"."$name[1]".".txt";
        $fhandle = fopen($file, 'w');
        $query = "ractip "."$file1"." "."$file2";
        $exec = shell_exec($query);
        print $exec;
        fwrite($fhandle, $exec);
        fclose($fhandle);
        if ($i == $count){
            $i = 1;
            $a++;
        }else{
            $i++;
        }
    }
?>

这是脚本。 我基本上使用一个工具来获得大约 3750 万个组合的结果,所以正如你所理解的那样,这不是我自己可以做的事情,因此有了这个脚本,以前我将所有候选者分成单独的文件,所以这就是我这样称呼它们的$name变量的解释。

问题是shell_exec命令,初步的 Google 搜索确实没有解释为什么它以这种方式运行,但shell_exec拒绝处理动态命令,相反,如果我要制作一个静态命令,例如ractip xy.txt zy.txt它会处理它,我需要做的是构建命令,然后让shell_exec处理它, 不幸的是,它没有这样做,如果有人可以解释为什么此命令以这种方式运行以及是否有针对此故障的解决方法,那将非常有帮助。

我终于明白了论坛

上的一个人说这些只是php做得不好的一些事情是什么意思。

哦,是的,我正在通过浏览器部署它,不知道这是否有任何帮助。

在Windows和Linux上,最好保留所有斜杠,如"/"。

另外,看起来您忘记了 $file 1 中的 $

$file2 = "D:/Ractip/mir/" . $name[1] . '.txt';
$file1 = "D:/Ractip/sequence/" . $name1[0] . ".txt";

最后,以防万一,为了清楚起见,我会写

$query = "ractip '$file1' '$file2'";

$query = 'ractip ' . $file1 . ' ' . $file2 ;

你真的不需要引用单个字符串变量,即 $string和"$string"是一回事。我确实用单引号/inside/$query引用了 $file 1 和 $file 2,因为如果名称包含空格,ractip 实用程序会对一个文件名停止和另一个文件名开始的位置感到困惑。也许这里不是你的情况,但无论如何...

我在您的代码中观察到的是,在您传递的文件名中,斜杠未正确转义:

$file2 = "D:\Ractip\mir\"."$name[1]".".txt";
$file1 = "D:\Ractip\sequence\"."name1[0]".".txt";

这可能会导致命令搜索错误的文件

相关内容

  • 没有找到相关文章

最新更新