Очищает файл вместо замены

Рейтинг: 0Ответов: 1Опубликовано: 30.06.2011

После этого кода 'Pesnike' должно поменятся на 'OldPes' но вместо этого идёт простая очистка файла.

<?php
    $filename = 'myfile.txt';
    if (!$handle = fopen($filename, 'w+"'))  {
        echo "Не могу '$filename' " ;
        exit;
    }
    else
    {
        echo "Я открыл '$filename' " ;
    }
    $content = fread($handle, sizeof($filename));
    $content = str_replace( 'Pesnike' , 'OldPes' , $content);
    if (fwrite($handle, $content) === FALSE) {
        echo "Лажа!";
        exit;
    }
    else
    {
        echo "Cool";
    }
    fclose($handle);
?>

Ответы

▲ 2

Потому что

fopen($filename, 'w+')

открывает файл для перезаписи. Для чтения - 'r' или 'rb'. Максим, прочитайте хоть какую-нибудь книжку по php. Практически любую)

UPD Не заметил

sizeof($var) // возвращает размер переменной (длину имени файла в вашем случае)

поменяйте

$content = fread($handle, sizeof($filename));

на

$content = fread($handle, filesize($filename));

Плюс: файл лучше переоткрыть. Вообще обычно делают так:

$whatReplace = 'Pesnike';
$ReplaceWith = 'OldPes';
$filename = 'myfile.txt';
$content = '';
if (!$f = @fopen($filename, 'rb')) {
  while (strlen($str = fread($f, 4096)) > 0)
    $content .= $str;
  fclose($f);
  if (empty($content)) 
    die('Файл пустой или недоступен.');
  if ($f = @fopen($filename, 'w+')) {
    if (!fwrite($f, str_replace($whatReplace, $ReplaceWith, $content)))
      die('Не могу записать в файл');
    fclose($f);
    } else die('Не могу открыть файл на запись');
  echo "Ok";
  } else die('Не могу открыть файл.');