首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

解決 PHP CLI 模式下相對路徑失效問題

     編輯:PHP 相關知識

解決 PHP CLI 模式下相對路徑失效問題

在命令列執行 PHP 腳本時,工作目錄預設為 php.exe 所在目錄,導致相對路徑無法正確定位檔案。本文提供兩種通用解決方案,適用於手動執行與 Crontab 定時任務。

問題重現

<?php
// 測試腳本
echo "原始工作目錄: " . getcwd() . "\n"; // 顯示 php.exe 目錄
$fp = fopen("data.txt", "w"); // 會在 php.exe 目錄建立檔案
fwrite($fp, "test");
fclose($fp);
?>

方案一:切換工作目錄(推薦)

<?php
$oldPath = getcwd();
$scriptDir = dirname(__FILE__); // 或 __DIR__ (PHP 5.3+)
chdir($scriptDir); // 切換至腳本所在目錄

echo "新工作目錄: " . getcwd() . "\n";

$fp = fopen("data.txt", "w"); // 現在在腳本目錄建立
fwrite($fp, "test");
fclose($fp);

chdir($oldPath); // 可選:恢復原目錄
?>

方案二:調整 include_path

<?php
$scriptDir = dirname(__FILE__);
$currentIncludePath = ini_get('include_path');
ini_set('include_path', $scriptDir . PATH_SEPARATOR . $currentIncludePath);

// 現在可以用相對路徑 require
require_once 'config.php';
require_once 'lib/database.php';
?>

Crontab 實戰範例

# 失敗範例:相對路徑 require 失敗
* * * * * /usr/bin/php /var/www/html/task/run.php

# 成功範例:在腳本開頭加入 chdir
* * * * * /usr/bin/php /var/www/html/task/run.php

# run.php 內容
<?php
chdir(dirname(__FILE__));
require_once '../config.php';
// ... 後續邏輯
?>

核心原理總結

  • getcwd() 取得當前工作目錄(CLI 下為 PHP 執行檔目錄)
  • __FILE__ / __DIR__ 取得目前腳本絕對路徑
  • chdir() 切換工作目錄,影響後續相對路徑解析
  • 定時任務務必在腳本最開頭切換目錄,避免路徑錯誤
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved