从 Perl 脚本运行 PHP

Posted

技术标签:

【中文标题】从 Perl 脚本运行 PHP【英文标题】:Running PHP from Perl Script 【发布时间】:2012-10-18 02:44:24 【问题描述】:

我正在尝试从我的 goDaddy 共享主机上的 perl 脚本运行 php 脚本。我最初编写的 PHP 脚本超过了 120 秒的时间限制和 mysql 内存限制,所以我将脚本分成几个部分。

我希望这一切都作为一个 cron 作业运行,所以我想调用一个运行 4-5 个 php 脚本的 perl 脚本。

这是我的网站,使用 Drupal 7 运行。

我写了一个 perl 脚本,内容如下:

my $command = '/web/cgi-bin/php5 -q $HOME/html/phpscript1.php';
exec ($command) or print STDERR "couldn't exec $command: $!";

其中调用了一个包含类似以下内容的 php 脚本:

<?php

define('DRUPAL_ROOT', getcwd());

include_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
....
do stuff
....
?>

但是当我从 perl 运行它时(在我的 $HOME 目录和 html 目录中都试过)我在运行脚本时看到了以下问题(其中 XXXXXX 是我的 Godaddy 帐户文件夹):

<b>Notice</b>:  Undefined index:  SCRIPT_NAME   
<b>/home/content/05/XXXXXXX/html/includes/bootstrap.inc</b> on line <b>1627</b><br />
<br />
<b>Notice</b>:  Undefined index:  REMOTE_ADDR in    
<b>/home/content/05/XXXXXXX/html/includes/bootstrap.inc</b> on line <b>2802</b><br />
<br />
<b>Notice</b>:  Undefined index:  argc in
<b>/home/content/05/XXXXXXX/html/includes/bootstrap.inc</b> on line <b>3290</b><br />

我推断这些是 FastGCI 的问题,我可能需要定义/导出/将这些索引/变量指向某些东西,但经过大量搜索后,我无法找出要做什么。

PHP 脚本使用 CURL 将图像从外部服务器复制到我的服务器

【问题讨论】:

【参考方案1】:

您收到 php 通知是因为您在自定义 php 脚本中引导 Drupal,而这些变量未在 cli 上定义。

该 php 脚本可能会更好地实现为 Drush 命令。 Drush 已经设置了 Drupal 期望定义的所有变量,并为您提供了一个框架,可以在 Drupal 实例中轻松运行自定义代码。即使您不想费心编写自定义命令,也可以像这样使用 drush 的脚本命令:

drush scr $HOME/html/phpscript1.php

此外,值得指出的是,这些只是 php 通知。它们不太可能导致您的脚本出现任何问题。

【讨论】:

感谢您的帮助。您对仍在运行的代码是正确的,但我担心错误。我尝试安装 drush,但我不认为没有 root 访问权限(愚蠢的 goDaddy)【参考方案2】:

所以这里的答案是不要像在你的 drupal 站点中那样引导 Drupal(例如在模块中创建函数)。相反,创建一个 .php 文件,其中包含您需要的功能,并在 Drupal 之外使用它(例如,在您的 html 文件夹上方)。感谢 Mark 的快速帮助。

【讨论】:

以上是关于从 Perl 脚本运行 PHP的主要内容,如果未能解决你的问题,请参考以下文章

从 Bash 或 Perl 脚本运行 SQL 语句?

如何在 localhost 中运行 perl 脚本?

Perl Apache 脚本按预期从 browser-perfroms 运行关闭正在运行的 perl 实例,但是当尝试启动新的 perl 实例时它啥也不做

从另一个环境调用 Perl 在后台

从计划任务运行 perl Plackup 脚本

在 Android 上运行 Perl 脚本