2012-07-19 124 views
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不能使用動態命令

的問題是shell_exec命令,初步谷歌搜索真的沒有解釋爲什麼它是表現這種方式,但shell_exec拒絕處理動態的命令,而不是如果我作出這樣ractip xy.txt zy.txt一個靜態的命令,它會處理的是,我需要做的是構建命令,然後使shell_exec處理它,但不幸的是,它不會執行,如果有人能夠解釋爲什麼這個命令以這種方式運行,以及是否有解決此問題的解決方法,這將非常有幫助。

我終於得到了各地的理解時,他說,這些都只是一些事情PHP不會做的非常好東西在論壇上一個人的意思。

哦,是的,我是通過瀏覽器部署它,如果這是說不上任何幫助。

+0

嘗試打印您的查詢,以檢查其是否爲測試目的執行前構造良好。 – Shubhansh 2012-07-19 05:24:45

+0

「而不是如果我是做像一個static命令‘ractip xy.txt zy.txt’這將處理」 我做過的一切,所有的工作完美,但對任何形式的動態指揮大樓的我得到蹲下。你在unix box上對嗎? – user1536806 2012-07-19 05:26:45

+0

對嗎?這可能是一個權限問題...運行shell_exec與whoami,並看看你的用戶運行... – 2012-07-19 06:02:08

回答

1

在Windows和Linux上,通過保留所有類似「/」的斜槓將會更好。

此外,看起來你忘了在$文件1一個$:

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

最後,爲了以防萬一,爲了清楚起見,我會寫

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

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

你並不需要引用單個字符串變量,即$ string和「$ s特林「是一回事。我用單引號/內部/ $查詢引用了$ file1和$ file2,因爲如果名稱包含空格,則ractip實用程序會對一個文件名停止的位置和另一個文件名開始的位置感到困惑。也許這不是在這裏你的情況,但無論如何...

+0

Iserni非常感謝!!!!!問題是缺少$,修復它,非常感謝:),仔細檢查了近4個小時,從未注意到這個小細節..感謝您的幫助:) – user1536806 2012-07-19 07:26:39

0

我在你的代碼觀察到的是,在文件名,你是路過,斜線不正確地轉義:

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

這可能導致該命令來搜索一個錯誤的文件

+0

Karan的斜線很好,因爲在以前的腳本中這不是一個問題... :)謝謝你的回覆 – user1536806 2012-07-19 07:25:17