2011-01-14 89 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);