PHP Sihirli Sabitler

5 Cevap php

Ben çalışan bir komut dosyası dosya almak için çalışıyorum (Ama o çağırıyor dahil değildir).

echo basename(__FILE__); # will always output include.php

echo basename($_SERVER['SCRIPT_FILENAME']);
# This will do what I want (echo myscript.php), but I was wondering if there was
# a better way to grab it, as I have had problems with $_SERVER['SCRIPT_FILENAME']
# when running certain scripts from a cron.

Herhangi bir öneriniz?

<?
#myscript.php
require('include.php');
echo "Hello all";
?>

<?
#include.php
echo basename(__FILE__);
echo basename($_SERVER['SCRIPT_FILENAME']);
?>

Teşekkürler!

5 Cevap

Sen reserved_variables man sayfasında açıklandığı gibi, $_SERVER['SCRIPT_NAME'] kullanmak zorunda

'SCRIPT_NAME' Contains the current script's path. This is useful for pages which need to point to themselves. The __FILE__ constant contains the full path and filename of the current (i.e. included) file.

Eğer crontab şey `php-f / home / ben / foo.php kullanıyorsanız (yani php-cli) da $argv dizide ilginizi çekebilir. $ Argv [0] başlangıçta php geçirilen komut dosyası yolu / adını içerir.

I did some test on what you have and dont have and there it is a sollution that worked fine for me ;) The file from which the code is name Debug.php and bellow is the method responding for the name of the log file.

Tarayıcı ve cron hem de benim durumumda sonucu: test.log

public static function filename($value = null) {
        static $_filename;
        if (isset($value)) $_filename = $value;
        if ($_filename === null) {
            $_filename = '';
            if (strlen($_SERVER["SCRIPT_FILENAME"])) {
                $filename = $_SERVER["SCRIPT_FILENAME"];
            } else if (count($_SERVER["argv"])) { // for cron calls
                $filename = $_SERVER["argv"][0];
            }
            if (!strlen($filename)) {
                $filename = __FILE__;
            }
            $arr = explode('.', basename($filename));
            $_filename = array_shift($arr) . '.' . Debug::extension();
        }
        return $_filename;
    }

Ben '$_SERVER["SCRIPT_NAME"]' kullanarak hatırlıyorum ama mısır ile sorunu olan varsa hiçbir fikrim yok.

PHP komut satırında (Eğer cron kurdunuz muhtemelen nasıl) SCRIPT_FILENAME içerecektir çalıştırıldığı zaman the path specified by the user. Script olarak idam ise ../myscript.php o alacağınız değerdir. Eğer içinden değer geçiyoruz olarak gören basename() Neyse, yine de ihtiyaçlarına uygun olmalıdır. Ne sorunlar tam olarak onunla yapıyorduk?

SCRIPT_NAME bakmak için başka bir önceden tanımlı değişken, ancak bu her zaman ya da idam dosyasının absolute yol içermez.