0
<?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:\Ractip\mir\\"."$name[1]".".txt";
        $file1 = "D:\Ractip\sequence\\"."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命令,初步的谷歌搜索确实没有解释为什么它会这样,但shell_exec拒绝处理动态命令,相反,如果我要制作一个静态命令,就像ractip xy.txt zy.txt它会处理那样,我需要做的是构建该命令,然后进行shell_exec处理,不幸的是它没有这样做,如果有人可以解释为什么这个命令会以这种方式运行以及是否有解决这个故障的方法,那将非常有帮助。

当论坛上的一个人说这些只是 php 做得不好的一些事情时,我终于明白了他的意思。

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

4

2 回答 2

1

在 Windows 和 Linux 上,最好保留所有像“/”这样的斜线。

另外,看起来您在 $file1 中忘记了 $

$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 引用了 $file1 和 $file2,因为如果名称包含空格,ractip 实用程序会混淆一个文件名在哪里停止而另一个文件名从哪里开始。也许这不是你的情况,但无论如何......

于 2012-07-19T07:07:38.347 回答
0

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

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

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

于 2012-07-19T07:00:16.793 回答