Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP脚本下载文本文件将删除中断行_Php - Fatal编程技术网

使用PHP脚本下载文本文件将删除中断行

使用PHP脚本下载文本文件将删除中断行,php,Php,所以我有一个文本文件来注册想要尝试演示的人的电子邮件。当我通过FTP下载文档时,所有电子邮件按预期的行分隔,但当我尝试使用代码第二部分中的下载页面下载文档时,它将所有电子邮件连接在一起,没有中断行 在文件中写入的代码 <?php if(isset($_POST['email'])) { if (validateEmail($_POST['email'])) { $file = 'documentos/emails.txt'; $p

所以我有一个文本文件来注册想要尝试演示的人的电子邮件。当我通过FTP下载文档时,所有电子邮件按预期的行分隔,但当我尝试使用代码第二部分中的下载页面下载文档时,它将所有电子邮件连接在一起,没有中断行

在文件中写入的代码

<?php
if(isset($_POST['email'])) 
{ 
    if (validateEmail($_POST['email'])) 
    {   
        $file = 'documentos/emails.txt';
        $person = "Data: ".date("d/m/Y H:i:s")." - Email: ".xss_protect($_POST['email']).PHP_EOL;
        file_put_contents($file, $person, FILE_APPEND | LOCK_EX);
    }
    else
    {
        $erro = "Introduza um email válido!";
        unset($_POST['email']);

    }

}
?>

文件下载代码

<?php
ob_clean();

$filename = strstr($_GET["file"], '/') . ".txt";
$filename = str_replace('/', '', $filename);
$file = $_GET["file"] .".txt";
header("Content-Disposition: attachment; filename=" . urlencode($filename));   
header('Content-type: text/plain');          
header("Content-Length: " . filesize($file));
flush();
$fp = fopen($file, "r");
while (!feof($fp))
{
    echo fread($fp, 65536);
    flush(); 
} 
fclose($fp); 
exit;
?>


提前感谢

可能会将FTP配置为转换目标系统的行尾,这种情况可能会发生。

PHP_EOL
可能不是您系统上识别的行尾,请尝试使用记事本++之类的程序,或者对系统将识别的新行进行编码。e、 g.
\r\n

确保您的文件使用了正确的换行符

echo str_replace("\n", "\r\n", fread($fp, 65536));

从你的描述中不太清楚发生了什么。但可能是因为换行符在MS Windows平台和unixoid系统(通常在服务器端使用)上的编码不同。我使用了“\r\n”并将其更改为PHP_EOL,因为我听说它会使不同的系统识别换行符,但下载文件时不起作用。不过它可以在filezilla中打开。@显然,Condward
PHP\u EOL
在服务器端使用了换行符代码!它无法猜测客户端操作系统!如果有疑问,请始终使用propper unixoid样式的换行符:
\r\n
,而不是MS Windows版本。在互联网上更有意义。谢谢你的解决方案。它只接受“\r\n”而不接受“\r\n”。