简体   繁体   English

规范化/标准路径根到 CLI/WEB

[英]Normalize/Standard path root to CLI/WEB

I have this short script to detect the user usage environment and try to normalize the root path:我有这个简短的脚本来检测用户使用环境并尝试规范化根路径:

Located in C:\xampp\htdocs\dev\t2\Last-Hammer\configs\const\loader.php位于C:\xampp\htdocs\dev\t2\Last-Hammer\configs\const\loader.php

$env= '';
if (php_sapi_name() == 'cli') {
    $env= 'cli';
    if (!isset($_SERVER['PWD'])) {
        $path = dirname(__DIR__).'\\';
    } else {
        $path = dirname($_SERVER['PWD']);
    }
} else {
    $env= 'web';
    $path = $_SERVER['DOCUMENT_ROOT'];
}
echo $path;
echo PHP_EOL;
echo $env;
file_get_contents($path.'configs/const/client.xml')

i use it from 2 diferent files: index.php that wor well in root folder but trying to use it from a sub-directory like this /dev/cron.php我从 2 个不同的文件中使用它: index.php在根文件夹中运行良好,但尝试从/dev/cron.php这样的子目录中使用它

cron.php content: cron.php内容:

$path = (!isset($_SERVER["PWD"]) ? dirname(__DIR__).'\\' : dirname($_SERVER["PWD"]));
require_once $path.'/configs/const/loader.php';

i get this output我得到这个 output

//from Web environment 
C:/xampp/htdocs/dev/t2/Last-Hammer/ 
web

and

//from CLI environment 
C:\xampp\htdocs\dev\t2\Last-Hammer 
cli

the problem is that this work correctly from Web environment but not work correctly in CLI, when i try to execute like: php cron.php code try to make a file_get_contents... like this using cli get this error:问题是,这在php cron.php环境中可以正常工作,但在 CLI 中无法正常工作,当我尝试执行如下操作时:

PHP Warning: file_get_contents(C:\xampp\htdocs\dev\t2\Last-Hammer\configs\configs/const/client.xml): failed to open stream: No such file or directory in C:\xampp\htdocs\dev\t2\Last-Hammer\configs\const\loader.php on line 24 PHP Warning: file_get_contents(C:\xampp\htdocs\dev\t2\Last-Hammer\configs\configs/const/client.xml): failed to open stream: No such file or directory in C:\xampp\htdocs\dev \t2\Last-Hammer\configs\const\loader.php 在第 24 行

Warning: file_get_contents(C:\xampp\htdocs\dev\t2\Last-Hammer\configs\configs/const/client.xml): failed to open stream: No such file or directory in C:\xampp\htdocs\dev\t2\Last-Hammer\configs\const\loader.php on line 24警告:file_get_contents(C:\xampp\htdocs\dev\t2\Last-Hammer\configs\configs/const/client.xml): 无法打开 stream: C:\xampp\h 中没有这样的文件或目录t2\Last-Hammer\configs\const\loader.php 在第 24 行

what is expected is that both for CLI or WEB, the root of the project is similar to: C:/xampp/htdocs/dev/t2/Last-Hammer/ and does not change constantly in the case of CLI depending on where it is executed the php file, as root could set in CLI.预计对于 CLI 或 WEB,项目的根目录类似于: C:/xampp/htdocs/dev/t2/Last-Hammer/并且在 CLI 的情况下不会不断变化,具体取决于它的位置执行 php 文件,因为 root 可以在 CLI 中设置。 regardless of where it runs.不管它在哪里运行。

You are lacking trailing "\" on cli case.您在 cli 案例中缺少尾随“\”。 to uniform both, you could use str_replace():要统一两者,您可以使用 str_replace():

$env= '';
if (php_sapi_name() == 'cli') {
    $env= 'cli';
    if (!isset($_SERVER['PWD'])) {
        $path = dirname(__DIR__).'\\';
    } else {
        $path = dirname($_SERVER['PWD']).'\\';
    }
} else {
    $env= 'web';
    $path = $_SERVER['DOCUMENT_ROOT'];
}
$path = str_replace( '\\', '/', $path );
echo $path;
echo PHP_EOL;
echo $env;
file_get_contents($path.'configs/const/client.xml')

define in your main scripts:在您的主脚本中定义

define('DOCROOT', '../'); // this in your cron.php
define('DOCROOT', './'); // this in your index.php

Just use relative paths:只需使用相对路径:

$path = DOCROOT;
file_get_contents($path.'configs/const/client.xml')

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM