echo 相关问题

简单的功能输出文本。存在于脚本语言中。

PHP echo() 损坏 readfile() 输出

我有这个PHP脚本(process.php): 我有这个 PHP 脚本(process.php): <?php // Include necessary libraries for database, PDF generation, and ZIP compression. require_once('db_connection.php'); require_once('tcpdf/tcpdf.php'); if (isset($_POST['submit'])) { // Get uploaded file data $csvFile = $_FILES['csv_file']['tmp_name']; // Initialize progress variables $totalRecords = count(file($csvFile)) - 1; // Subtract 1 for the header row $processedRecords = 0; // Create a temporary directory to store the PDF files $tempDir = '/var/www/html/insuromatic/temp/'; if (!file_exists($tempDir)) { mkdir($tempDir, 0777, true); } // Create a ZipArchive instance $zip = new ZipArchive(); $zipFileName = 'pdf_archive.zip'; if ($zip->open($zipFileName, ZipArchive::CREATE | ZipArchive::OVERWRITE) === true) { // Open and read the CSV file if (($handle = fopen($csvFile, "r")) !== FALSE) { // Skip the first row (header) fgetcsv($handle); while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { // Assuming your CSV columns are in order (column1, column2, column3) $column1 = $data[0]; $column2 = $data[1]; $column3 = $data[2]; // Insert data into the MySQL database $sql = "INSERT INTO import_csv_data (id, name, email) VALUES ('$column1', '$column2', '$column3')"; mysqli_query($conn, $sql); // Generate a PDF for this record $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); $pdf->AddPage(); $pdf->SetFont('helvetica', '', 12); $pdf->Cell(0, 10, "ID: $column1", 0, 1); $pdf->Cell(0, 10, "Naam: $column2", 0, 1); $pdf->Cell(0, 10, "Email: $column3", 0, 1); // Customize the PDF content as needed // Save the PDF in the temporary directory $pdfFileName = $tempDir . "record_$column1.pdf"; $pdf->Output($pdfFileName, 'F'); // Add the PDF to the ZIP archive $zip->addFile($pdfFileName, "record_$column1.pdf"); // Delete the record from the database $deleteSql = "DELETE FROM import_csv_data WHERE id = '$column1'"; mysqli_query($conn, $deleteSql); // Update progress $processedRecords++; // Send progress to the client // echo "Processed $processedRecords out of $totalRecords records.<br />\n"; // LINE 65 // Flush the output buffer to send data immediately to the client ob_flush(); flush(); // Close the PDF document $pdf->Close(); } fclose($handle); } // Close the ZIP archive $zip->close(); // Remove temporary PDF files array_map('unlink', glob($tempDir . '*.pdf')); rmdir($tempDir); // Provide the ZIP archive for download header("Content-Type: application/zip"); header("Content-Disposition: attachment; filename=\"$zipFileName\""); ob_end_clean(); flush(); readfile($zipFileName); // LINE 89 unlink($zipFileName); // Delete the ZIP file after download } // Close the MySQL connection mysqli_close($conn); } ?> 服务器配置: Apache/2.4.57 (Debian) PHP 8.0.30 FPM/FastCGI 问题: 当第 89 行的 readfile() 语句被注释掉时,第 65 行的 echo() 语句工作正常,我看到屏幕上回显了进度 当第 65 行的 echo() 语句被注释掉时,第 89 行的 readfile() 语句工作正常,我得到了包含创建的 PDF 文件的 ZIP 下载 但是,当两条线都启用时,在进度回显到屏幕后,我在屏幕上看到很多垃圾(我认为是原始 PDF 内容)。 ZIP 不提供下载。 不幸的是,我不知道我做错了什么。我尝试了 ob_end_clean()、ob_end_flush() 等几个地方,但没有运气,垃圾不断被打印。有人能指出我正确的方向吗? //编辑:重做版本: <?php // Include necessary libraries for database, PDF generation, and ZIP compression. require_once('db_connection.php'); require_once('tcpdf/tcpdf.php'); if (isset($_POST['submit'])) { // Get uploaded file data $csvFile = $_FILES['csv_file']['tmp_name']; // Initialize progress variables $totalRecords = count(file($csvFile)) - 1; // Subtract 1 for the header row $processedRecords = 0; // Create a temporary directory to store the PDF files $tempDir = '/var/www/html/insuromatic/temp/'; if (!file_exists($tempDir)) { mkdir($tempDir, 0777, true); } // Open and read the CSV file if (($handle = fopen($csvFile, "r")) !== FALSE) { // Skip the first row (header) fgetcsv($handle); while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { // Assuming your CSV columns are in order (column1, column2, column3) $column1 = $data[0]; $column2 = $data[1]; $column3 = $data[2]; // Insert data into the MySQL database $sql = "INSERT INTO import_csv_data (id, name, email) VALUES ('$column1', '$column2', '$column3')"; mysqli_query($conn, $sql); // Generate a PDF for this record $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); $pdf->AddPage(); $pdf->SetFont('helvetica', '', 12); $pdf->Cell(0, 10, "ID: $column1", 0, 1); $pdf->Cell(0, 10, "Naam: $column2", 0, 1); $pdf->Cell(0, 10, "Email: $column3", 0, 1); // Customize the PDF content as needed // Save the PDF in the temporary directory $pdfFileName = $tempDir . "record_$column1.pdf"; $pdf->Output($pdfFileName, 'F'); // Delete the record from the database $deleteSql = "DELETE FROM import_csv_data WHERE id = '$column1'"; mysqli_query($conn, $deleteSql); // Update progress $processedRecords++; // Send progress to the client echo "Processed $processedRecords out of $totalRecords records.<br />\n"; // Flush the output buffer to send data immediately to the client ob_flush(); flush(); // Close the PDF document $pdf->Close(); } fclose($handle); } // Close the MySQL connection mysqli_close($conn); // Output a JavaScript script to perform the redirection echo '<script>window.location.href = "download.php";</script>'; //Prevent any further execution exit; } ?> 下载.php: <?php // Specify the directory containing your PDF files $directory = '/var/www/html/insuromatic/temp'; // Define the name of the ZIP archive file $zipFileName = 'pdf_archive.zip'; // Create a ZipArchive object $zip = new ZipArchive(); // Open the ZIP archive for writing if ($zip->open($zipFileName, ZipArchive::CREATE | ZipArchive::OVERWRITE) === true) { // Create a recursive directory iterator to scan the directory $iterator = new RecursiveDirectoryIterator($directory); $files = new RecursiveIteratorIterator($iterator); // Loop through all files in the directory foreach ($files as $file) { // Check if the file is a PDF if ($file->isFile() && strtolower(pathinfo($file, PATHINFO_EXTENSION)) === 'pdf') { // Add the PDF file to the ZIP archive with its original name $zip->addFile($file, $file->getBasename()); } } // Close the ZIP archive $zip->close(); // Remove temporary PDF files $tempDir = '/var/www/html/insuromatic/temp/'; array_map('unlink', glob($tempDir . '*.pdf')); rmdir($tempDir); // Set the appropriate headers for a ZIP file download header('Content-Type: application/zip'); header('Content-Disposition: attachment; filename="' . $zipFileName . '"'); header('Content-Length: ' . filesize($zipFileName)); // Send the ZIP file to the client's browser readfile($zipFileName); // Delete the ZIP file from the server (optional) unlink($zipFileName); exit; // Terminate the script } else { echo "Failed to create ZIP archive."; } ?> 为了 ob_end_clean(); 要工作,您需要首先使用启动输出缓冲 ob_start(); 并且不得使用 ob_flush(); 介于两者之间。

回答 1 投票 0

WooCommerce 产品页面上没有产品详细信息

我有以下代码,用于显示包含当前产品页面中的一些信息的模式: 函数 Visualizer_modal() { 如果(!is_product()){ 返回; ...

回答 1 投票 0

如何在shell脚本中使用echo命令打印带有变量的字符串

我在终端中定义了一个 shell 变量,然后使用 echo 命令输出带有该变量的字符串,并且它在终端中运行良好。 但是当我在 shell 脚本中使用相同的命令时...

回答 1 投票 0

调用我的 Windows .bat 时 ECHO 是打开还是关闭?

当我从另一个 Windows .bat 文件调用一个 Windows .bat 文件时,被调用的文件能否判断调用者中的 ECHO 是 ON 还是 OFF? 当输入 .bat 文件时,ECHO 将设置为 ON(即使它在 CALLER 中为 OFF)...

回答 4 投票 0

为什么这个 bash 脚本的函数可以工作?

我在教程中看到了一个功能,我认为它非常酷。它用于为文本着色。 函数定义如下: 函数打印颜色(){ 案例 1 美元 “绿色”) COLOR=' [0;32m' ;; ...

回答 1 投票 0

PHP 在 txt 文件中搜索并回显整行

使用 php,我正在尝试创建一个脚本,它将在文本文件中搜索并抓取整行并回显它。 我有一个标题为“numorder.txt”的文本文件(.txt),在该文本文件中,...

回答 8 投票 0

批处理脚本制作批处理脚本

好简单我想制作一个批处理脚本: 在用户桌面上创建导出文件夹 从新(如不从某处复制)在该文件夹中创建一个批处理脚本,列出该文件夹的内容...

回答 2 投票 0

如何让 PHP 回显表中的数据

**当前代码:** // 显示航班详细信息 echo "航班详情"; echo "飞机名称: $aircraft_name"; 呃...

回答 1 投票 0

PHP 字符串中的 & 符号

我遇到了一点问题。我正在尝试创建一个 IRC 机器人,其密码中有一个 & 符号。但是,我在将 & 符号放入字符串时遇到问题。例如... 我遇到了一点问题。我正在尝试创建一个 IRC 机器人,其密码中有一个 & 符号。但是,我在将 & 符号放入字符串时遇到问题。例如... <?php $var = "g&abc123"; echo $var; ?> 我相信这应该打印g&abc123。然而它正在打印g。 我也尝试过这个: <?php $arr = array("key" => "g&abc123"); print_r($arr); ?> 这可以使用 g&abc123 正确打印它,但是当我说 echo $arr['key']; 时,它会再次打印 g。任何帮助,将不胜感激。我正在运行 PHP5.3.1。 编辑:另外,我刚刚注意到,如果我使用g&abc123&abc123,它会打印g&abc123。有什么建议吗? 我在控制台中没有这个问题: php > $d="g&abc123"; php > echo $d; g&abc123 您将输出打印到什么环境?听起来您正在 Web 浏览器中查看它,并且 & 被解释为格式错误的 HTML 实体。尝试用实体编码版本替换 & 符号 &amp;。 查看源代码,它会打印正确的代码。 如果您希望它以 HTML 格式正确打印,请在其上运行 htmlentities 或制作 & &amp; 查看网页源代码以确保您的变量包含正确的值。 您可能正在将输出发送到 Web 浏览器。 正确的做法是 在 HTML、XHTML 和 XML 中,& 符号具有特殊含义。它用于字符实体。您可以将其视为某种转义序列。 例如,在 PHP 中,这是非法的: $variable = 'It's Friday'; 这是因为 PHP 将撇号解释为字符串的结尾,而其余内容看起来就像垃圾。 相反,你必须说: $variable = 'It\'s Friday'; 同样,在 HTML 和 XHTML 中,你也不能说 <h1>Inequalities</h1> <p> x<yz+3 </p> 这是因为它会被解释为一个元素。 相反,你必须说: <h1>Inequalities</h1> <p> x&lt;yz+3 </p> 现在,如您所见,& 符号本身具有特殊含义,因此需要转义为 &。 htmlspecialchars() 会为你做的。 Ao enviar os dados para o ajax 使用: encodeURIComponent(Txt);

回答 5 投票 0

echo 修饰符“f|”是什么意思在bat文件中执行[重复]

“f|”是什么意思在这个bat命令中执行 echo f|xcopy /Y /v "foo.exe" "%TargetFile1%"

回答 1 投票 0

Discord bot python echo 命令图像

我有一个命令可以让机器人回显我的消息,但是如果我粘贴图像,机器人就会出错,我不知道如何修复它。我希望我的机器人能够使用 echo 命令并插入我粘贴的照片...

回答 1 投票 0

即使使用 sudo 也无法使用“echo”重定向数据

我尝试在根目录中创建一个文件,但即使使用 Sudo 时,它也说我没有权限。 制作目录和文件: $ sudo mkdir /VM $ sudo touch /VM/hi $ 尝试回显到文件: ...

回答 1 投票 0

如何使用函数参数中的数组索引打印数组的值?

我正在使用三个功能。一是获取驱动器列表: REM 列出驱动器 :列表磁盘 ECHO 驱动器列表 设 n=0 for /f "skip=1 delims=" %%a in ('wmic Logicaldisk get DeviceID^'...

回答 1 投票 0

如何在Windows批处理文件输出中获取PowerShell命令和ECHO命令的输出一行?

以下命令行在 Windows 批处理文件中不起作用: Powershell.exe -Command Get-Date -Format 'yyyy-MM-dd HH:mm:ss' echo "Hello World" 预期结果是:2021-05-09 12:...

回答 2 投票 0

命令行回显中双引号换行解释的混乱

我一直在学习命令行扩展和替换,包括路径名扩展和命令替换。在我的研究中,我遇到了控制这些扩展的概念...

回答 1 投票 0

Linux 命令 shell 脚本

我正在Linux日志文件中搜索,其中有一些错误代码,我想每小时计算这些代码,但我的要求是响应代码应以下面的形式显示。在附件中...

回答 1 投票 0

在bash脚本ubuntu中回显逻辑表达式的输出

var1 = 'abc' var2 = 'bc' echo "打印结果:$[[$var1 =~ $var2]]" 此 echo 命令不起作用。如何正确打印逻辑表达式 $var1 =~ $var2 的输出? 我是...

回答 2 投票 0

在 C++ 程序中将 echo 输出通过管道传输到 cin 会导致无限循环

问题 我想将十六进制字符输入到 C++ 程序中。为此,我使用命令 回显-e“2 \x01\x00\x01\x00" | ./program 4 /dev/stdin 其中输入 2 应该去 cin >...

回答 1 投票 0

定时任务不计秒间隔

我这里有一个批处理代码,可以在特定日期和时间终止任务,然后关闭我的计算机 `@回声关闭 回声测试 schtasks /create /tn "结束任务" /tr "cmd /c taskkill /pid 1492 /...

回答 0 投票 0

使用批处理文件运行和执行程序

我有这个批处理脚本可以帮助我自动下载和运行我的程序。但这是我遇到的问题:这创建了自己的目录,但下载的程序不存储任何内容......

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.