[英]Strange file_get_contents() behavior
這是我的代碼:
<?php
$file = 'install.php';
echo file_get_contents($file);
?>
該代碼實際上位於傳遞到file_get_contents()的文件中。 為什么會出現“無法打開流:/path/to/install.php中沒有此類文件或目錄”的警告? 這沒有任何意義,因為完全相同的事情在我在同一台服務器上擁有的另一個項目中可以完美地工作。
請幫忙!
順便說一句,我啟用了cURL,並且allow_fopen設置為On。 我不知道可能是什么問題。
更新:
當我使用絕對路徑(/var/www/path/to/install.php)時,它可以按預期工作,但是,由於此操作的目的是設置自動安裝腳本,因此我確實需要能夠使用相對路徑。 在哪里可以實現這一目標?
該錯誤是由於無法讀取。 這通常是由於不存在(文件路徑錯誤)或當前用戶(例如www-data
)具有不正確的文件權限。
您可以檢查一下以避免錯誤:
$file = realpath('foo.php');
if (! file_exists($file)) {
throw new \Exception(sprintf('The file %s cannot be found', $file));
} else if (! is_readable($file)) {
throw new \Exception(sprintf('The file %s cannot be read', $file));
} else {
$contents = file_get_contents($file);
}
請查閱有關文件系統功能的文檔,以找到調試此類錯誤的更有用的方法。
更新
要擴展相對文件路徑,請使用realpath()
如果我是你,我會做兩項檢查:
I.是install.php,與包含以下內容的腳本文件位於同一目錄中:
<?php
$file = 'install.php';
echo file_get_contents($file);
?>
二。 像install.php的所有者之類的Unix是網頁調用者,例如,在Debian OS中,install.php的組和所有者應為www-data ? 如果所有者是root,則由於無法讀取文件,網頁無法讀取此文件。
以root身份登錄時,在root用戶下復制整個目錄時,可能會發生此錯誤,root將是其創建的所有者。 沒有其他用戶可以讀取這些目錄/文件。
由於您說的是這段代碼實際上位於install.php
(如果我理解正確的話),那么執行以下操作就足夠了:
<?php
echo file_get_contents(__FILE__);
?>
另外,這不僅會使腳本獨立於文件系統,而且使腳本獨立。
采用:
echo htmlspecialchars(file_get_contents($file));
問題在於,該文件的源包含<?php
和?>
標記,因此它們的輸出效果很好,但是您的瀏覽器無法直觀地顯示該塊(查看頁面的源,您將在那里看到)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.