Php Fopen записать в файл CSS -> файл пуст - PullRequest
0 голосов
/ 13 декабря 2011

У меня есть следующий php код:

     $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

Ответы [ 3 ]

5 голосов
/ 13 декабря 2011

Я вижу несколько ошибок:

  1. Вы используете fopen, чтобы проверить, существует ли файл. Это не работает. В режиме w+ PHP попытается создать файл, если он не существует. Используйте функцию file_exits для проверки существования файла.

  2. Вы открываете один и тот же файл дважды.

Также используйте константы PHP (LOCK_SH, LOCK_UN) для второго аргумента flock. Это сделает вашу программу более читабельной.

1 голос
/ 13 декабря 2011

Обновлено

Вы проверили, записывает ли он информацию в каталог, отличный от ожидаемого? Проверьте свой путь, чтобы увидеть, где он по умолчанию, или даже просто выполнить поиск файла и посмотреть, где еще он появляется. getcwd () покажет текущий рабочий каталог.

Вы проверили возвращаемое значение fwrite, чтобы увидеть, действительно ли запись работает? Если fwrite успешен, попробуйте прочитать файл в коде, используя тот же $ id_file, и посмотрите, есть ли что-нибудь там, пока программа еще работает.

Вы дважды звоните в fopen. w + усекает файл, а вы записываете во второй $ id_file, поэтому я предполагаю, что он усекается при закрытии 1-го $ id_file.

0 голосов
/ 30 августа 2016

Вы можете использовать этот подход, если ваш файл пуст после использования опции 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);
...