1

我在这里遇到了一个非常奇怪的问题。我正在使用下面的代码通过 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 表单上传时要小。知道这里发生了什么吗?

4

1 回答 1

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);
于 2012-09-11T04:02:59.747 回答