root@iZ2zeil:/opt/php# find ./ -name *.pid
./vendor/workerman/_opt_php_serv.php.pid
是不是考慮兼容下,這幾個文件放置在項目根目錄還是比較合理的,在vendor下就不太有意義的感覺了,是不是添加個判斷啥的看看是不是PSR4模式?
從源碼來看不只是pid文件,日志文件的路徑也有這樣的問題
// Start file.
$backtrace = \debug_backtrace();
static::$_startFile = $backtrace[\count($backtrace) - 1]['file'];
$unique_prefix = \str_replace('/', '_', static::$_startFile);
// Pid file.
if (empty(static::$pidFile)) {
static::$pidFile = __DIR__ . "/../$unique_prefix.pid";
}
// Log file.
if (empty(static::$logFile)) {
static::$logFile = __DIR__ . '/../workerman.log';
}
$log_file = (string)static::$logFile;
if (!\is_file($log_file)) {
\touch($log_file);
\chmod($log_file, 0622);
}
另外請教下使用 這里的debug_backtrace()如果僅僅是為了獲取文件所在的位置,和使用 __FILE__ 有什么區(qū)別
感謝你的建議。
之前有考慮過項目根目錄創(chuàng)建一個runtime目錄,將pid和日志等放到runtime下。但是如果框架粗暴的更改pid位置,用戶不停服務就升級后會導致正在運行的服務pid找不到,導致停止失敗。所以一直沒動這里。
__FILE__
是獲取當前文件,使用 debug_backtrace() 是因為要得到啟動服務的入口文件start.php ,在框架里使用__FILE__
得不到start.php文件位置
再問一個問題,新版本的workerman很多函數(shù)前面都有 \ ,比如上面的
if (!\is_file($log_file)) {
\touch($log_file);
\chmod($log_file, 0622);
}
這個目的是什么呢,是為了結(jié)構(gòu)更加清晰么,這些函數(shù)都是系統(tǒng)級的,不用指定命名空間也都可以直接調(diào)用吧
之前有考慮過項目根目錄創(chuàng)建一個runtime目錄,將pid和日志等放到runtime下。但是如果框架粗暴的更改pid位置,用戶不停服務就升級后會導致正在運行的服務pid找不到,導致停止失敗。所以一直沒動這里。
這個原因特別有說服力,我發(fā)現(xiàn)嘗試修改進程的 $processTitle 也有這個問題,直接導致找不到之前的程序
關(guān)于debug_backtrace()的多謝回復,原來如此