2014-12-03 63 views
1

我正在做一個重命名,所以我可以移動一個文件夾。此舉很成功,但我不斷收到警告:php重命名警告,儘管成功

警告:rename(site_files/259,trash/site_files/259)[function.rename]:/ home/oosman/public_html/lib中沒有這樣的文件或目錄.PHP在線79

這是我的代碼:

$path_parts = pathinfo($file); 
$d = $path_parts['dirname']; 
$f = $path_parts['basename']; 

$trashdir='trash/'.$d; 
mkdir2($trashdir); 
if(!is_dir($trashdir)) 
    return FALSE; 

rename($file, $trashdir.'/'.$f); // this is line 79 where the warning is coming from 

爲什麼會收到這樣的警告?

FYI的mkdir2只是我的遞歸函數的mkdir

function mkdir2($dir, $mode = 0755) 
{ 
    if (@is_dir($dir) || @mkdir($dir,$mode)) return TRUE; 
    if (!mkdir2(dirname($dir),$mode)) return FALSE; 
    return @mkdir($dir,$mode); 
} 
+1

你可能想用的是'重命名($ path_parts,$ trashdir '/'。$ f);' – 2014-12-03 04:03:31

+1

如果您停止使用'@'來抑制錯誤,您可能會看到更多的警告,這些警告會告訴您原因。 – 2014-12-03 04:23:31

回答

2

這只是因爲源或目標文件夾不存在。

這無論如何但不刪除該警告的最佳方式來解決這個問題:

if(file_exists($file) && file_exists($trashdir)){ 
    rename($file, $trashdir.'/'.$f); 
} 

爲了找出真正的問題是,請檢查下面的問題:

1.Does源文件(site_files/259)是否存在?它是否有像259.txt這樣的擴展名?

從你的日誌中,我猜原始文件的絕對路徑應該是/home/oosman/public_html/site_files/259

2.您是否已成功創建目標文件夾?你可以在磁盤上看到它,並從mkdir2()得到TRUE

3.我強烈建議您在使用rename()時使用絕對路徑,但不使用相對路徑。

rename('/home/oosman/public_html/site_files/259', '/home/oosman/public_html/trash/site_files/259'); 

但不

rename('site_files/259', 'trash/site_files/259'); 

也許有毛病的相對路徑?

更新2014年12月4日12:00:00(GMT 900):

因爲它沒有什麼上面提到的,你可以請登錄一些事來幫助我澄清一下?

請更改

rename($file, $trashdir.'/'.$f); 

echo "Before moving:\n" 
echo "Orgin:".file_exists($file)."\n"; 
echo "Target parent folder:".file_exists($trashdir)."\n"; 
echo "Target file:".file_exists($trashdir.'/'.$f)."\n"; 
rename($file, $trashdir.'/'.$f); 
echo "After moving:\n" 
echo "Orgin:".file_exists($file)."\n"; 
echo "Target parent folder:".file_exists($trashdir)."\n"; 
echo "Target file:".file_exists($trashdir.'/'.$f)."\n"; 

如果輸出:

Before moving: 
Origin:1 
Target parent folder:1 
Target file:0 
Warning: rename(site_files/259,trash/site_files/259) [function.rename]: No such file or directory in /home/oosman/public_html/lib.php on line 83 
After moving: 
Origin:0 
Target parent folder:1 
Target file:1 

恰好只有一次,然後我出。如果沒有,請告訴我不同​​之處。

+0

就像我說的,這一舉措是成功的。該文件夾的確移動到新的位置。那麼爲什麼會發出警告? – rosewater 2014-12-03 15:40:35

+0

而site_files/259是一個文件夾,而不是文件。我將(成功)將site_files/259移至垃圾箱/ site_files/259。但警告出現。在另一個與此類似的SO問題中,我讀到目標文件夾位於不同的分區上。就我而言,我無法確定100%,但我相信它是相同的分區,因爲兩個文件夾都有相同的根文件夾。 – rosewater 2014-12-03 15:43:22

+0

你確定你只調用過這個函數一次嗎?不是像'移動文件已移動'? – kyo 2014-12-04 01:03:29

0

一種可能性是簡單地隱藏警告:

error_reporting(E_ALL & ~E_WARNING); 
rename($file, $trashdir.'/'.$f); 
error_reporting(E_ALL & ~E_NOTICE); 
相關問題