Cron.php未定義のインデックス 'SCRIPT_FILENAME'


7

あらすじ

私はこのエラーを受け取ります:

Cron.php未定義のインデックス 'SCRIPT_FILENAME'

次のコードがmagentoコアにあるのはなぜcron.phpですか?

// Only for urls
// Don't remove this
$_SERVER['SCRIPT_NAME'] = str_replace(basename(__FILE__), 'index.php', $_SERVER['SCRIPT_NAME']);
$_SERVER['SCRIPT_FILENAME'] = str_replace(basename(__FILE__), 'index.php', $_SERVER['SCRIPT_FILENAME']);

したがって、私のcrontabには次のようになります(cPanelで- はい、私はcPanelが嫌いですが、私には選択肢がありません)。

*/5 * * * * /bin/sh /home/user/public_html/cron.sh 2>&1

実行すると、次の出力が得られます。

Array
(
    [MAILTO] => ***
    [SHELL] => /usr/local/cpanel/bin/jailshell
    [USER] => ***
    [PATH] => /usr/bin:/bin
    [PWD] => /home/***
    [LANG] => en_US.UTF-8
    [HOME] => /home/***
    [SHLVL] => 2
    [LOGNAME] => ***
    [_] => /usr/bin/php
    [PHP_SELF] =>
    [REQUEST_TIME_FLOAT] => 1427981401.51
    [REQUEST_TIME] => 1427981401


    [argv] => Array
        (
            [0] => /home/***/public_html/cron.php
        )

    [argc] => 1
)

回答:


3

以下のようmam08ixoは述べている特定の_SERVER性質は、しかし、CLI上で私が使用してこれを解決し、いくつかの異常な構成に起因する利用可能ですphp-cli

php-cli /home/***/public_html/cron.php > /dev/null &2>1

3

これは私のために働いたものです:

php -f /home/USERNAME/www/cron.php >/dev/null 2>&1

そして、私はcron.phpを修正しなければなりませんでした

$isShellDisabled = true;

の代わりに

$isShellDisabled = (stripos(PHP_OS, 'win') === false) ? $isShellDisabled : true;

リファレンス:http : //support.xtento.com/wiki/Setting_up_the_Magento_cronjob

エラーログに未定義のインデックスが表示され続けましたが、機能していました。ただし、それを改善するために、エラーを削除するためにcron.phpの変数を初期化しました。そのようです:

$_SERVER['SCRIPT_NAME'] = '';
$_SERVER['SCRIPT_FILENAME'] = '';

2

CLIを介してスクリプトを実行しているときに、$_SERVER 実行(!)環境情報が利用できないと「最終的に」考えるのはなぜですか。

PHP言語の参照は、それが実際にいることをいくつかのヒントやコメントが含まれています。また、私の範囲内の任意のマシンで、$_SERVER問題なく設定されています。したがって、未定義のインデックス通知が表示された場合は、一般的なでの失敗ではなく、環境の特殊性が原因であると考えられますcron.php

variables_order設定には特に注意してください。

付録:あなたが考えるする場合があります$_SERVERようサービス提供エンティティから取得した情報。シェル、mod_php、fastcgiなどです。そのため、変数の内容(キー)は現在の環境に依存します。一番下の行は、$_SERVERWebサーバー経由で提供された場合にのみ入力されるわけではありません。


私が使用します:/usr/bin/php -d display_errors=1 -f cron.phpそしてエラーが発生します。また、print_r($_SERVER)内部でテストをcron.php行いましたが、インデックスは存在しません。
2015

あなたの付録に基づいて、それは正しいです-しかし、なぜmagentoが未定義のインデックスでまだエラーを出すのですか-それは愚かです。
2015

2

これはSCRIPT_FILENAMEcron が見つからないためのGoogleのトップ結果であるため、私は呼びかけます。

私にとっては、異なるECOM(cPanelのOpenVZは+ FastCGIの上のCS-カート)に、クーロンの不足しているインデックスは、cronの中のphpへのパスを使用しただけではなくによって発見/解決されましたphpphp-cliwhich phpシェルで実行するか、cPanel cronビルダーでそれを使用します。これはcPanelが独自の内部バージョンのPHPを使用しているためか、おそらくFastCGIの謎が散りばめられているためかもしれないと理論的に考えていますが、まだ正確にはわかりません。

例:

php /home/account/public_html/script.php <-失敗する

php-cli /home/account/public_html/script.php <-失敗する

$(which php) /home/account/public_html/script.php <-ダイナミックルートとしてCLIで機能しますが、cPanel cronビルダーでは失敗します

/usr/local/bin/php /home/account/public_html/script.php <-cPanel cronビルダーで動作しますが、phpへの静的ルートであるため、サーバーによって異なる場合があります


最初$(which php)に回答を文書化するときにいくつかの問題があったことを覚えていますが、これは他の人にも役立つはずであり、通常は自分で普通に使用するものです。私の問題を引き起こしたのはcPanelかPleskか忘れていました。
2017年

@ashうんうんwhich php、特にCloudLinux / WHMマルチphpマネージャーが他のバージョンにenvをスローすることについて聞いた。他の人が必要とするかもしれないものと言えば、先日、Vtigerをで検証/実行させるために、より多くのcronの問題に遭遇しましたphp-cli。トラブルシューティングが必要な場合に、より多くの環境情報( "_"インデックスなど)を公開しようとする小さなヘルパースクリプトを作成しました:gist.github.com/dhaupin/7c88be87a543e59f5be9fb55c7b963a9
dhaupin

1

私が知っているこの特定/システム固有の問題に対する2つの解決策があるかもしれません:

crontabの場合:その上部に次の2行を追加します。

SCRIPT_NAME = "cron.php"

SCRIPT_FILENAME = "cron.php"

または

それをCRON自体にラップします。

* / 5 * * * * SCRIPT_NAME = cron.php; SCRIPT_FILENAME = cron.php; php〜/ public_html / cron.php> / dev / null 2>&1


0

これは私にとってGodaddy Cpanelで機能したものです。

/usr/local/bin/php -q /home/USERNAME/public_html/path_to_cron.php >/dev/null 2>&1

そして、私は変更する必要がありcron.php、使用するだけです

$isShellDisabled = true;

の代わりに

$isShellDisabled = (stripos(PHP_OS, 'win') === false) ? $isShellDisabled : true;

Zurd、あなたの答えを投稿してくれてありがとう。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.