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