2011-12-13 64 views
0

我有這個下面的PHP代碼:PHP的FOPEN在css文件中寫入 - >文件空

 $filename = '/front/style.css'; 
    $cssfile='#h1{font-size:12px}'; 
    if($id_file=fopen($filename, "w+")) 
     { 
      echo'file exist'; 
     $id_file=fopen($filename, "w+"); 
     flock($id_file,1); 
     fwrite($id_file,$cssfile); 
     flock($id_file,3); 
     fclose($id_file); 
     } 
     else 
     { 
      echo "file don t exist"; 
     } 

我的文件是空的,但與空間。 我的文件存在,它是可寫的。 我沒有在我的Apache日誌。 我使用MAMP與PHP 5.3.2。

任何想法? THX

+0

這是怎麼回事?你想讓我們做什麼? – Jon

+0

我不知道這是什麼問題。這似乎是正確的..如果有人遇到同樣的問題... – prestarocket

+1

你能100%確保$ cssfile被定義?或者在執行fwrite之前執行'var_dump($ cssfile);'' – ajreal

回答

5

犯了一些錯誤,我可以看到的是:

  1. 您正在使用fopen來檢查文件是否存在。這是行不通的。在w+模式下,如果文件不存在,PHP將嘗試創建該文件。使用file_exits函數來檢查文件的存在。

  2. 您正在打開同一個文件兩次。

還可以使用PHP常數(LOCK_SHLOCK_UN)爲flock第二個參數。這會讓你的程序更具可讀性。

+0

但這些並不能解釋fwrite不起作用 – ajreal

+0

@coddaddict thx它現在的工作... – prestarocket

1

更新

你如果到不同的目錄寫入比預期的檢查?檢查你的路徑,看看它默認的位置,甚至只是搜索文件,看看它在哪裏出現。 getcwd()將顯示當前工作目錄是什麼。

您是否檢查過fwrite的返回值以查看寫入是否實際工作?如果fwrite成功,那麼嘗試使用相同的$ id_file在代碼中讀取文件,並在程序仍在運行時查看是否有任何內容。

你打電話給fopen兩次。 w +截斷該文件,並且正在寫入第二個$ id_file,所以我猜測在第一個$ id_file被關閉時它會被截斷。

+0

儘管fopen兩次,代碼仍然工作,不再想法? – ajreal

+0

我編輯了我的帖子,將所有內容保存在一起。 – FluffyKitten

0

如果在使用fopen w +選項後文件爲空,則可以使用此方法。

// only read 
$filename = '/path/to/blah.txt'; 
$myfile = fopen($filename, "r"); 
$mydata = fread($myfile, filesize($filename)); 
$mynewdata = $mydata + 'abc'; 
fclose($myfile); 

// only write 
$myfile = fopen($filename, "w"); 
fwrite($myfile, $mynewdata); 
fclose($myfile);