PHP добавить текст в файл - PullRequest
       0

PHP добавить текст в файл

1 голос
/ 06 сентября 2011

это мой код для добавления новой записи в конец файла карты сайта:

$add_info="
 <url>
 $token
 <lastmod>$date</lastmod>
 </url>
</urlset>";
$end_string = "</urlset>";
$length_end_string = strlen($end_string);
fseek($handle, -$length_end_string, SEEK_END);
fwrite($handle, $add_info);

, который работает хорошо, но иногда портит конец файла, например:

<url>
 <loc>http://example.com/url1.html</loc>
 <lastmod>2011-08-31</lastmod>
 </url>
</url<url>
 <loc>http://example.com/url2.html</loc>
 <lastmod>2011-08-28</lastmod>
 </url>
</urls<url>

Может ли это быть причиной того, что php-парсер не может правильно добраться до конца файла?

Ответы [ 3 ]

1 голос
/ 06 сентября 2011

Я думаю, что причина проблемы в том, что у вас есть

</urlset>

в переменной $ add_info.

она не должна содержать закрытие URL-адреса.

Кроме того, попробуйте подсчитать символ вручную и ввести в параметр жестко заданное отрицательное число и посмотрите, что произойдет.(из этого может получиться что-то интересное)

1 голос
/ 06 сентября 2011

При правильно настроенном файле это должно работать, ОДНАКО, вы слепо перематываете 9 символов, поэтому, если в конце файла будет лишний пробел, он сломается. Тот факт, что ваш тег urlset close усекается двумя различными способами, может указывать на то, что ваш файл не соответствует вашим ожиданиям.

Вы можете найти способы проверить положение указателя файла или использовать библиотеку xml, как указано в комментарии к вашему Q.

1 голос
/ 06 сентября 2011

Добавьте вызов к flockLOCK_EX) после открытия файла. Это предотвратит смешанные записи из-за параллелизма.

...