PHP上传文件并逐行读取

时间:2012-09-11 03:57:16

标签: php html

我在这里遇到了一个非常奇怪的问题。我正在使用下面的代码通过php将txt文件上传到我的服务器。

    <form enctype="multipart/form-data" action="index.php" method="POST">
        <input type="file" name="uploadfile">
        <button>Submit</button>
    </form>

上传文件后(工作正常)我通过以下代码将内容转换为数组:

$fp = @fopen($file, 'r'); 

if ($fp) { 
    $domains = explode("\n", fread($fp, filesize($file))); 
}

然后我运行preg_match来过滤数组:

$list = preg_grep('/^[a-z]+\.com$/', $domains);

我确认$ domains正在填充txt文件中的数据,但是当我运行print_r($ list)时,它只返回“array()”

当我使用FTP上传相同的文本文件并运行print_r($ list)时,它可以正常工作。

我还注意到,当我使用我的FTP客户端上传相同的文本文件时,“domains.txt”的文件大小比使用我的html表单上传时更小。知道这里发生了什么吗?

1 个答案:

答案 0 :(得分:2)

这可能与您的FTP客户端在UNIX和Windows之间自动更改行结尾有关。

要解决此问题,请在使用trim之前使用preg_grep清除每一行。类似的东西:

foreach ($domains as $key => $domain) {
    $domains[$key] = trim($domain);
}

// or better use array_walk and closures PHP 5.3+
array_walk($domains, function(&$e) { $e = trim($e); });

问题在于你的正则表达式有明确的行首和行尾锚点。

顺便说一句,你只需使用file函数就可以在一个语句中将整个文件加载到一个行数组中。

$domains = file($file);