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++;
        }
    }
?>

これがスクリプトです。私は基本的にツールを使用して約 3,750 万通りの組み合わせの結果を取得しているため、ご理解のとおり、これは私が自分でできることではありません。したがって、このスクリプトにたどり着きました。以前はすべての候補を個別のファイルに分けていたので、 $name 変数の説明 私はそのように呼んでいます。

問題はshell_execコマンドです。予備のGoogle検索では、なぜこのように動作するのかを実際に説明していませんでしたが、動的コマンドの処理を拒否しました.代わりに、それを処理する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" は同じものです。$file1 と $file2 を単一引用符 /inside/ $query で引用しました。これは、名前にスペースが含まれていると、ractip ユーティリティが 1 つのファイル名がどこで停止し、別のファイルが開始するかについて混乱するためです。ここではあなたの場合ではないかもしれませんが、とにかく...

于 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 に答える