PHP shell_exec() - 直接运行,或执行 cron (bash/php) 并包含 MySQL 层?

标签 php linux security optimization shell-exec

抱歉,如果标题含糊不清 - 我不太确定如何措辞!

我在做什么

我正在运行 Linux 命令以将数据输出到变量、解析数据并将其作为数组输出。数组值将显示在使用 PHP 的页面上,并且每 10 秒通过 AJAX 请求此 PHP 页面输出,因此实际上,数据将每 10 秒检索和显示/更新一次。每个请求可能会解析多达 10,000 个字符,尽管这通常要少得多。

替代想法

我想知道是否有更好的*替代方法每 10 秒检索一次此数据,因为多个用户 (<10) 将自动为他们执行此命令。

在服务器上运行的 cronjob 可以执行 bash 或 php(哪个更快?)来获取数据并将其存储在 MySQL 数据库中。然后,对 PHP 输出的任何 AJAX 调用都将返回 MySQL 数据库中的值,而不是每 10 秒直接调用一次执行服务器代码。

为什么?

我知道直接从 PHP 运行 exec 存在安全问题,并且(我希望这不是微优化)我担心服务器上的 CPU 使用率。服务器正在运行一个 sempron 处理器。是的,它们仍然存在。

仅当用户在页面上时执行此操作(想法 #1)意味着服务器未运行不需要运行的代码。然而,这是否缓慢且不安全?

以防万一 linux 命令的类型可能有助于确定其效率:

shell_exec("transmission-remote $host:$port --auth $username:$password -l");

我希望我上面概述的两种方法在效率和安全级别上存在差异,并且这不仅仅是微观优化。如果有更好的替代方法*,我很乐意了解这些! :)

最佳答案

我认为单独的 cron 作业执行数据处理的想法是合理的。你是对的——直接从 PHP 脚本执行服务器命令并不是最安全的做事方式,通常应该避免。

但是,从性能的角度来看,您可能也不希望不断访问 MySQL 数据库来获取数据,尤其是当数据总是在变化和更新时。我建议使用像 Memcache 这样的 key-val 存储系统,或者如果您没有太多可用内存,则可以使用磁盘/内存存储的混合体。您的后台进程会定期更新 key 的值,然后您可以从主 Web 服务器进程访问它。

关于PHP shell_exec() - 直接运行,或执行 cron (bash/php) 并包含 MySQL 层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13104396/

相关文章:

Python MySQL,这是准备好的语句吗?

javascript - 自动提交不适用于此脚本

javascript - 在特定 URL 目录 (htaccess) 上运行 javascript 函数

java - 使用有效 CA 签名的小程序仍显示为未知发布者

android - 打开另一个 Activity 有多安全?

linux - ubuntu - 禁用从特定进程/rsyslog 进程记录到 syslog

php - 如何防止重复的用户名和电子邮件数据?

javascript - WAMP 上的 PHP 更喜欢相同的随机数组元素?

linux - 从文本文件中 grep 多个字符串并将其导出到 CSV

c - GCC 4.6.3 Linux -O3 启用优化列表与应用于代码差异。优化顺序是否影响代码编译?