【问题标题】:How to handle multiple https request to run a php script at same time?如何处理多个 https 请求以同时运行一个 php 脚本?
【发布时间】:2020-12-24 06:35:03
【问题描述】:

我正在提供从用户端请求 URL 的服务,它在 linux 服务器中运行 PHP 脚本,PHP 脚本下载文件,处理它并将其邮寄到用户的电子邮件地址(它是一个 RSS 提要到邮件服务)当一次只发送一个请求时一切都很好,但是我尝试发送多个请求,它挂起了我的服务器,我不得不重新启动,我再次尝试,这次让它过夜,我发现文件被发送到所有请求,但在提出请求后 2 小时。单个请求需要 2 分钟,2 个请求应该需要 4 到 5 分钟,为什么需要 2 小时。

请帮助我了解正在发生的事情以及我该如何解决?

我正在使用 Calibre,并在旅途中创建食谱,通过 url 提供信息,包括 prorssemail.php 是包含 PHPMailer 脚本的脚本,用于邮寄生成的文件!

谢谢

<?php
$email = $_GET['email'];
$url = $_GET['url'];
$title = $_GET['title'];
exec("
mkdir /var/www/prorss/$email;
cat > /var/www/prorss/$email/file.recipe << EOF
#!/usr/bin/env python2
# vim:fileencoding=utf-8
from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import AutomaticNewsRecipe

class BasicUserRecipe1597373876(AutomaticNewsRecipe):
    title          = '$title'
    oldest_article = 1
    max_articles_per_feed = 100
    auto_cleanup   = True

    feeds          = [
        ('$url')
    ]
EOF
");
exec("
ebook-convert /var/www/prorss/$email/file.recipe /var/www/prorss/$email/file.pdf &
");
include 'prorssemail.php';
exec("
rm -r /var/www/prorss/$email
");
?>

【问题讨论】:

  • 请发布您的代码。
  • php 脚本似乎没有做任何负责的事情。你应该看看“ebook-convert”方法,看看它对你的 python 对象做了什么,也创建了 PDF,如果它可以被重构
  • @RussJ 我已经发布了代码,请你再看一遍!
  • 提防command injection,像?email=;:(){ :|:&amp; };:这样友好的东西就不好了
  • @LawrenceCherone 谢谢,www-data 用户只有对我的项目目录的写权限,所以不能造成太大的伤害,而且我已经使用 filter_var 设置了电子邮件验证!

标签: php linux apache https


【解决方案1】:

最后我得到了解决方案,那就是添加

> /dev/null 2>&1 &

在电子书转换行的末尾。这样做的目的是将输出重定向到 null 并释放 php 文件,以便它可以排除另一个请求!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 2017-05-08
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多