【问题标题】:Running a PHP script with command line as if it was called by Apache使用命令行运行 PHP 脚本,就好像它被 Apache 调用一样
【发布时间】:2014-05-23 06:04:53
【问题描述】:

我正在使用 PHP 的 APC 模块的用户缓存。我正在使用 cron 作业来调用更新变量的脚本。当我通过浏览器运行脚本时,一切正常。但是,当我通过命令行运行脚本时,它无法存储或检索变量。我记得在某处读到 APC 将变量存储在 Apache 进程中。使用命令行,我直接运行脚本(没有 Apache),所以 APC 用户缓存不起作用。

我找不到让 APC 与命令行一起工作的方法(apc.enable_cli 不起作用)。因此,我想找到一种通过命令行运行 PHP 脚本的方法,就好像它被 Apache 调用一样。脚本不在文档根目录中,所以我不能使用本地浏览器。如何使用命令行让 Apache 运行 PHP 脚本?

我的 cron 行看起来像这样:

0 * * * * /path/to/php /path/to/script.php

【问题讨论】:

  • 您能否添加一些上下文来说明您要访问哪些 apc 缓存数据(相关代码示例)?
  • 也许您应该为此使用memcached。易于安装,您可以通过端口或本地 unix 套接字简单地访问它。或redis..

标签: php apache cron apc


【解决方案1】:

使用 php-cli 运行 php,您将永远无法达到与 mod_php 在 Apache 中使用的相同的 APC 缓存。这是设计

使用 apc.enable_cli 时,您只需激活另一个 APC 缓存,用于脚本的整个生命周期。

因此,APC 不是存储“变量”的正确位置,因为它不像数据库或键/值存储那样是共享存储。

例如,您在how to empty a drupal cache set on APC while running in cli mode 上的 drupal.org 问题上有一个很长的线程,这通常意味着两步模式,您在共享存储中存储 mod_php 版本可以稍后读取的指令,而不是直接访问。

我不知道在命令行模式下运行 mod_php 的任何方法。

【讨论】:

  • 如果我使用 mod_php 以外的其他东西运行 PHP,它会起作用吗? arzzzen 建议使用 CGI,那(或更可能是 FCGI)会起作用吗?
  • php-fpm 使用所有池共享的 apc 缓存,但不与 php-cli 共享。对于cgi我不知道。
【解决方案2】:

也许你应该使用 php-cgi 版本。 当你用终端运行 php 时,你使用 php cli 版本,但它可以有其他设置而不是 php-cgi。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 2014-07-10
    • 2023-02-22
    • 2012-11-20
    相关资源
    最近更新 更多