2011-01-14 88 views
1
$string = (string) file_get_contents($_FILES['file']['tmp_name']); 

echo $string; 

// Correctly echos string contents 

preg_match_all("/[\._a-zA-Z0-9-][email protected][\._a-zA-Z0-9-]+/i", $string, $matches); 

print_r($matches); 

// No matches 

我解析文本/ csv文件並從上傳的文件中獲取電子郵件地址。解析我導出的Google聯繫人文件時奇怪地失敗。但是,當我簡單地複製echo'd的字符串並粘貼該字符串而不是file_get_contents結果時,它會解析並運行。preg_match_all混淆失敗

任何想法爲什麼它拒絕採用file_get_contents字符串,但如果我自己粘貼原始數據,它的工作原理?

+0

我認爲這是`file_get_contents`和上傳的問題,您應該刪除'預浸匹配,所有`標籤? 編輯:嘗試使用`move_uploaded_file`然後閱讀它? – 2011-01-14 04:55:41

+1

只是一個筆記;由於您使用的是不區分大小寫的修飾符,因此我認爲它是多餘的,包括字符類中的兩個alpha字符範圍。 `a-z`應該就夠了。 – Dan 2011-01-14 05:21:06

回答

0

$_FILES['file']['tmp_name']是一個臨時的上傳文件,你應該移動到一個目錄先調用file_get_contents之前,像

$tmp_file = '/tmp/test.csv' 
move_uploaded_file($_FILES['file']['tmp_name'], $tmp_file); 
$string = file_get_contents($tmp_file);