我制作了一个PHP应用程序,使用spatie库顶部将pdf文件转换为jpg,使用ghost脚本和imagickMagic。
这个过程很慢,但是在开发环境中,它运行良好。我刚刚调整了 php.ini 中的 max_time_execution (我使用 xampp)并且 tádááá!它可以很好地处理大型且复杂的 pdf 文件。需要时间,但它会过去。但尚未投入生产
我将 max_time_execution、post_max_size、memory_limit 更改为最大值,但仍然收到此错误消息:
[Thu Jul 25 10:46:54.558135 2024] [lsapi:error] [pid 27229:tid 140211220608768] [client 181.222.135.68:54373] [host myhost.com] Error on sending request(GET /phpfile.php?file=teste.pdf HTTP/1.1); uri(/phpfile.php?file=teste.pdf) content-length(0): ReceiveAckHdr: nothing to read from backend (LVE ID 5487), check http://docs.cloudlinux.com/mod_lsapi_troubleshooting.html, referer: http://mydomain.php
服务器已满负荷,应用程序非常简单:代码如下:
$pdf = new Spatie\PdfToImage\Pdf("$path".$file);
$numberPfpages = $pdf->getNumberOfPages();
$j = 1;
for ($i=0; $i < $numberPfpages; $i++) {
$fileName = $path."página_".$j;
$pdf->setPage($j)->saveImage($fileName.".jpg");
$j++;
}
}
因此,在这个循环中,文件被分页并将页面转换为jpg,因此用户可以一页一页地阅读jpg格式的pdf。它可以提供更好的用户体验,例如标记页面并对页面进行评论。这就是我发现我的应用程序中具有所有这些功能的方式。
我不知道服务器有什么问题,也不知道如何正确配置它,所以它可以与我选择上传和阅读的任何 pdf 一起运行。
您在服务器上遇到的错误消息似乎与 LiteSpeed API (lsapi) 的问题有关,并且服务器已满负荷。
在这方面,您可以尝试修改服务器上的 php.ini 配置(如果您有权访问它),例如:
max_execution_time = 300
max_input_time = 300
memory_limit = 512M
post_max_size = 100M
upload_max_filesize = 100M
max_file_uploads = 20
对于 LiteSpeed,您可以尝试调整子级数量和最大请求数,例如:
LSAPI_CHILDREN=50
LSAPI_MAX_REQUESTS=5000
最后但并非最不重要的一点是,尝试批量处理 PDF 页面:
<?php
$pdf = new Spatie\PdfToImage\Pdf("$path" . $file);
$numberPfpages = $pdf->getNumberOfPages();
$batchSize = 10; // Process 10 pages at a time
$j = 1;
for ($i = 0; $i < $numberPfpages; $i += $batchSize) {
$end = min($i + $batchSize, $numberPfpages);
for ($k = $i; $k < $end; $k++) {
$fileName = $path . "pagina_" . $j;
$pdf->setPage($j)->saveImage($fileName . ".jpg");
$j++;
}
// Optional: Pause or flush the output to free up resources
sleep(1);
flush();
}
?>
希望对您有用!