2014-08-30 63 views
0

我有一個運行於cmd matlab函數的php文件 - >該函數創建.txt文件並將其填充分析結果。然後php文件將這個.txt文件作爲一個字符串(從.txt行)發送到數據庫(phpmyadmin)。 我的問題是,當matlab仍在寫入文件時,php開始從.txt發送信息。 我想用matlab和php知道他的全局變量來解決它,並將其用作Flag確定Matlab何時完成構建必要文件的標誌。我想使用窗口註冊表,但它非常複雜。有更簡單的方法嗎?防止文件碰撞PHP與Matlab

非常感謝, 多倫

我的PHP文件:

unlink('test.txt'); 
if(isset($_POST['filepath'])) { 
    $filename = $_POST['filepath']; 
    $inputDir = "C:\\xampp\\htdocs\\login"; 
    $outputDir = "C:\\xampp\\htdocs\\login"; 

    // here php open the matlab function from the cmd: 

    $command = "matlab -sd ".$inputDir." -r phpcreatefile2('".$outputDir."\\".$filename.".txt')"; 
    exec($command); 

    $fileLoc= "".$outputDir."\\".$filename.".txt" ; 
    echo $fileLoc ; 
    echo "The following command was run: ".$command."<br/>"; 
    echo $filename." was created in ".$outputDir."<br/>"; 
    echo " Now the txt file will write in the DB <br/>"; 

//這裏我試圖檢查文件是否存在,如果它不是空的。但它不工作,因爲matlab仍然寫入文件。

while (1) { 

     if (file_exists("test.txt")){ 
     echo "check1"; 
     if (filesize("test.txt")!= 0) { 
     echo "check2"; 
     $file = file('test.txt'); 
     $sql = "INSERT INTO `ID_5525_Medical_record`(`Data`,`AV_Power`,`Highest_Amp`,`90BW`,`Url_figure`) VALUES ('$file[0]','$file[1]','$file[2]','$file[3]','$file[4]')" ; 
     if(mysqli_query($connection,$sql)) 
     { 
     unlink('test.txt'); 
     echo "the txt file is now in the DB <br/>"; 
     } 
     break; 
     } 
     else { 
     echo "i am going to sleep"; 
     sleep(1); 
     echo "i am awake"; 
     } 
     } 
    } 

`

回答

0

通常情況下,使用COM是執行PHP和MATLAB之間的進程間通信的正確方法(或者一些替代方案,認爲一切都足以讓這個簡單的任務)。

在這裏看起來你只需要調用MATLAB一個,就可以修復在命令後附加-wait的行爲。這迫使啓動程序保持打開,直到matlab關閉,阻止你的PHP腳本在exec($command);。最大的缺點是,你必須爲每個函數調用啓動Matlab,然後關閉它。使用com,一個實例可以保持開放並且執行一切。