【发布时间】: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=;:(){ :|:& };:这样友好的东西就不好了 -
@LawrenceCherone 谢谢,www-data 用户只有对我的项目目录的写权限,所以不能造成太大的伤害,而且我已经使用 filter_var 设置了电子邮件验证!