2011-06-08 104 views
1

我們有一個VOIP服務器,用於存儲通話記錄的wav文件。我的意圖是將一個PHP文件放在一起,我可以在文件的URL中傳遞calldate和uniqueid值(因爲服務器將這些文件存儲爲文件名的一部分)以檢索文件的鏈接。獲取PHP中的文件鏈接

「解析錯誤:語法錯誤,在/var/www/html/maint/helloworld.php意想不到的$結束第42行」

但是,試圖這樣做時,我得到以下錯誤

<?php 

function getRecordingLink($callDate, $uniqueId){ 

$callDate_arr = explode(' ', $callDate); 

$removeChar = array('-',':'); 
foreach($callDate_arr as $value){ 
    $callDate_arr_adj[] = str_replace($removeChar,'',$value); 
} 

$audioDirectory_array = array(); 
if ($handle = opendir('/var/spool/asterisk/monitor/')) { 
    while (false != ($file = readdir($handle))) { 
     if ($file != "." && $file != "..") { 
      $audioDirectory_array[] = $file; 
     } 
    } 
    closedir($handle); 
} 

foreach($audioDirectory_array as $key => $value){ 

    if (preg_match ("/".$uniqueId."/i", $value)) { 
     if(file_exists('/var/spool/asterisk/monitor/'.$value)){ 
      $wavFile = $value; 
      //return '<a href="/maint/modules/cdrreport/monitor/'.$wavFile.'" target="_blank">Recorded File</a>'; 
      return '/maint/cache/monitor/' . $wavFile; 
     } 
    }else{ 
     //return "Not Recorded"; 
    } 

getRecordingLink ('20110513','1305274000.2'); //sample calldate and uniqueid values for testing 

?>

下面是MySQL數據庫表從那裏我將拿起值的描述傳遞到這個網址calldate和uniqueid`

mysql> describe cdr 
    -> ; 
+-------------+--------------+------+-----+---------------------+-------+ 
| Field  | Type   | Null | Key | Default    | Extra | 
+-------------+--------------+------+-----+---------------------+-------+ 
| calldate | datetime  | NO |  | 0000-00-00 00:00:00 |  | 
| clid  | varchar(80) | NO |  |      |  | 
| src   | varchar(80) | NO |  |      |  | 
| dst   | varchar(80) | NO |  |      |  | 
| dcontext | varchar(80) | NO |  |      |  | 
| channel  | varchar(80) | NO |  |      |  | 
| dstchannel | varchar(80) | NO |  |      |  | 
| lastapp  | varchar(80) | NO |  |      |  | 
| lastdata | varchar(80) | NO |  |      |  | 
| duration | int(11)  | NO |  | 0     |  | 
| billsec  | int(11)  | NO |  | 0     |  | 
| disposition | varchar(45) | NO |  |      |  | 
| amaflags | int(11)  | NO |  | 0     |  | 
| accountcode | varchar(20) | NO |  |      |  | 
| uniqueid | varchar(32) | NO |  |      |  | 
| userfield | varchar(255) | NO |  |      |  | 
+-------------+--------------+------+-----+---------------------+-------+ 
+1

錯誤信息是什麼意思?只是'內部服務器錯誤'?你能打開你的服務器上的調試或更好的錯誤信息嗎? – mdm 2011-06-08 14:06:19

+0

只是'內部服務器錯誤' - 我沒有試過打開調試,但我可以看看如何做到這一點。我不是特別熟悉php環境,我只是從VOIP服務器上的其他php文件中借用了這段代碼,因爲它有一個在PHP中開發的gui – 2011-06-08 14:15:05

+0

好的。說實話,你不會從StackOveflow或任何人(包括你自己)得到任何有價值的答案,而不能很好地理解錯誤的原因,或至少一些更多的上下文信息。獲取更好的錯誤信息,編輯你的文章以包含它,並且你應該得到更有幫助的迴應:) – mdm 2011-06-08 14:18:45

回答

1

右鍵,剛剛在這個:-P

你缺少兩個花括號從文件的底部上方getRecordingLink()另一個好辛苦的樣子:

function getRecordingLink($callDate, $uniqueId){ 

    $callDate_arr = explode(' ', $callDate); 

    $removeChar = array('-',':'); 
    foreach($callDate_arr as $value){ 
     $callDate_arr_adj[] = str_replace($removeChar,'',$value); 
    } 

    $audioDirectory_array = array(); 
    if ($handle = opendir('/var/spool/asterisk/monitor/')) { 
     while (false != ($file = readdir($handle))) { 
      if ($file != "." && $file != "..") { 
       $audioDirectory_array[] = $file; 
      } 
     } 
     closedir($handle); 
    } 

    foreach($audioDirectory_array as $key => $value){ 
     if (preg_match ("/".$uniqueId."/i", $value)) { 
      if(file_exists('/var/spool/asterisk/monitor/'.$value)){ 
       $wavFile = $value; 
       //return '<a href="/maint/modules/cdrreport/monitor/'.$wavFile.'" target="_blank">Recorded File</a>'; 
       return '/maint/cache/monitor/' . $wavFile; 
      } 
     }else{ 
      //return "Not Recorded"; 
     } 
    } 
} 
getRecordingLink ('20110513','1305274000.2'); 

我從here得到了錯誤是:

Parse error: syntax error, unexpected $end in /homepages/26/d94605010/htdocs/lz/writecodeonline.com/php/index.php(98): eval()'d code on line 32

該文件現在爲我解析,但我無法測試它實際上做了什麼。如果這不起作用,請在評論中遵循我的建議。

+0

感謝您幫助我發現大括號。現在我只是得到一個空白的屏幕,所以我懷疑代碼本身工作。我想現在我需要提供正確的calldate和uniqueid來爲我繪製一個鏈接嗎? – 2011-06-08 14:31:53

+0

沒錯,你需要'echo getRecordingLink(...)'來輸出它到頁面。 – mdm 2011-06-08 14:33:31

+0

你先生,是個紳士和天才。非常感謝你的幫助。它現在工作非常漂亮。我已經將你的答案標記爲已接受,如果還有其他好的姿態,我可以爲你做,謝謝,請讓我知道。再次感謝。 – 2011-06-08 14:36:09