<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Комментарии к записи: PHP: запись информации в текстовый файл</title>
	<atom:link href="http://www.linkexchanger.su/2008/10.html/feed" rel="self" type="application/rss+xml" />
	<link>http://www.linkexchanger.su/2008/10.html</link>
	<description>css, html, php, javascript, jQuery, ajax ... - решения, примеры, рецепты</description>
	<lastBuildDate>Tue, 07 Feb 2012 14:36:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>Автор: orangeudav</title>
		<link>http://www.linkexchanger.su/2008/10.html/comment-page-1#comment-63411</link>
		<dc:creator>orangeudav</dc:creator>
		<pubDate>Mon, 11 Jan 2010 09:36:26 +0000</pubDate>
		<guid isPermaLink="false">http://www.linkexchanger.su/10#comment-63411</guid>
		<description>вот так правильно делать запись/чтение в файл, дабы не порушить его
 в этом случае доступ контролируется на уровне движка php и блокировок
function read_status() {
	flock($f, LOCK_EX);
	rewind($f);
	$curr = trim(fgets($f));
	$full = trim(fgets($f));
	flock($f, LOCK_UN);
	fclose($f);
	return array(
		&#039;curr&#039; =&gt; $curr,
		&#039;full&#039; =&gt; $full,
	);
}

function write_status($curr, $full) {
	$f = fopen(STATUS_FILE,&#039;a&#039;);
	flock($f, LOCK_EX);
	ftruncate($f, 0);
	fputs($f, $curr.&quot;\n&quot;);
	fputs($f, $full);
	fflush($f);
	flock($f, LOCK_UN);
	fclose($f);
}</description>
		<content:encoded><![CDATA[<p>вот так правильно делать запись/чтение в файл, дабы не порушить его<br />
 в этом случае доступ контролируется на уровне движка php и блокировок<br />
function read_status() {<br />
	flock($f, LOCK_EX);<br />
	rewind($f);<br />
	$curr = trim(fgets($f));<br />
	$full = trim(fgets($f));<br />
	flock($f, LOCK_UN);<br />
	fclose($f);<br />
	return array(<br />
		&#8216;curr&#8217; =&gt; $curr,<br />
		&#8216;full&#8217; =&gt; $full,<br />
	);<br />
}</p>
<p>function write_status($curr, $full) {<br />
	$f = fopen(STATUS_FILE,&#8217;a');<br />
	flock($f, LOCK_EX);<br />
	ftruncate($f, 0);<br />
	fputs($f, $curr.&raquo;\n&raquo;);<br />
	fputs($f, $full);<br />
	fflush($f);<br />
	flock($f, LOCK_UN);<br />
	fclose($f);<br />
}</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: Gennady</title>
		<link>http://www.linkexchanger.su/2008/10.html/comment-page-1#comment-63327</link>
		<dc:creator>Gennady</dc:creator>
		<pubDate>Sun, 10 Jan 2010 20:07:53 +0000</pubDate>
		<guid isPermaLink="false">http://www.linkexchanger.su/10#comment-63327</guid>
		<description>1. Да.
2. Не помешает.
:)</description>
		<content:encoded><![CDATA[<p>1. Да.<br />
2. Не помешает.<br />
 <img src='http://www.linkexchanger.su/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: strannic</title>
		<link>http://www.linkexchanger.su/2008/10.html/comment-page-1#comment-63132</link>
		<dc:creator>strannic</dc:creator>
		<pubDate>Sat, 09 Jan 2010 12:33:05 +0000</pubDate>
		<guid isPermaLink="false">http://www.linkexchanger.su/10#comment-63132</guid>
		<description>Возникла необходимость поработать с файлами, и вновь обратился к Вашему методу.
Два вопроса. 

1. Вы открываете блокировочный файл PATH_BLOCKFILE до оператора IF (2я строка), а закрываете его внутри условного оператора (12стр). Правильно ли будет вынести закрытие файла за пределы IF?

2. Если добавить последней строкой удаление блокировочного файла 
unlink(&quot;PATH_BLOCKFILE&quot;); 
-  это не помешает надёжности работы скрипта ?

___
Спасибо!</description>
		<content:encoded><![CDATA[<p>Возникла необходимость поработать с файлами, и вновь обратился к Вашему методу.<br />
Два вопроса. </p>
<p>1. Вы открываете блокировочный файл PATH_BLOCKFILE до оператора IF (2я строка), а закрываете его внутри условного оператора (12стр). Правильно ли будет вынести закрытие файла за пределы IF?</p>
<p>2. Если добавить последней строкой удаление блокировочного файла<br />
unlink(&laquo;PATH_BLOCKFILE&raquo;);<br />
-  это не помешает надёжности работы скрипта ?</p>
<p>___<br />
Спасибо!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: Александр</title>
		<link>http://www.linkexchanger.su/2008/10.html/comment-page-1#comment-62505</link>
		<dc:creator>Александр</dc:creator>
		<pubDate>Wed, 06 Jan 2010 23:45:52 +0000</pubDate>
		<guid isPermaLink="false">http://www.linkexchanger.su/10#comment-62505</guid>
		<description>Скрипт судя по всему замечательный, но есть  одно но.
Ваша логика понятна, сохранить в целости и сохранности данные при одновременном доступе нескольких пользователей, путем сохранения данных во временный файл, блокировки и т.д...
Это на самом деле не ново - некоторые движки баз данных примерно так и поступают, например Access, из-за того что NTFS или FAT не позволяет блокировать файл по сети напрямую, но они нашли оригинальный выход, создали дополнительный файл (назовем его lock файл) НО! ВНИМАНИЕ! они не пишут в этот lock файл данные базы данных, а пишут информацию о блокировке файла БД. 
Таким образом программа проверяет lock файл и если там есть какие-либо данные о блокировке другими процессами, то она ждет пока не появится запись о том что основной файл БД свободен для записи. А потом уже процесс пишет в lock файл свои данные, проверяет что все записано успешно, и уже обращается в основному файлу БД.
Кстати, этот метод и позволяет оперировать с файлом БД даже большого размера. Мне сейчас необходимо написание подобного скрипта, но как всегда нехватает времени. Ставлю эту страничку в закладки, интересно как разовьется дальше эта дискуссия.</description>
		<content:encoded><![CDATA[<p>Скрипт судя по всему замечательный, но есть  одно но.<br />
Ваша логика понятна, сохранить в целости и сохранности данные при одновременном доступе нескольких пользователей, путем сохранения данных во временный файл, блокировки и т.д&#8230;<br />
Это на самом деле не ново &#8211; некоторые движки баз данных примерно так и поступают, например Access, из-за того что NTFS или FAT не позволяет блокировать файл по сети напрямую, но они нашли оригинальный выход, создали дополнительный файл (назовем его lock файл) НО! ВНИМАНИЕ! они не пишут в этот lock файл данные базы данных, а пишут информацию о блокировке файла БД.<br />
Таким образом программа проверяет lock файл и если там есть какие-либо данные о блокировке другими процессами, то она ждет пока не появится запись о том что основной файл БД свободен для записи. А потом уже процесс пишет в lock файл свои данные, проверяет что все записано успешно, и уже обращается в основному файлу БД.<br />
Кстати, этот метод и позволяет оперировать с файлом БД даже большого размера. Мне сейчас необходимо написание подобного скрипта, но как всегда нехватает времени. Ставлю эту страничку в закладки, интересно как разовьется дальше эта дискуссия.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: bestужев</title>
		<link>http://www.linkexchanger.su/2008/10.html/comment-page-1#comment-54026</link>
		<dc:creator>bestужев</dc:creator>
		<pubDate>Wed, 02 Dec 2009 09:47:09 +0000</pubDate>
		<guid isPermaLink="false">http://www.linkexchanger.su/10#comment-54026</guid>
		<description>Здорово уметь читать доки и приводить из них цитаты... :)</description>
		<content:encoded><![CDATA[<p>Здорово уметь читать доки и приводить из них цитаты&#8230; <img src='http://www.linkexchanger.su/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: Андрей</title>
		<link>http://www.linkexchanger.su/2008/10.html/comment-page-1#comment-54021</link>
		<dc:creator>Андрей</dc:creator>
		<pubDate>Wed, 02 Dec 2009 09:29:26 +0000</pubDate>
		<guid isPermaLink="false">http://www.linkexchanger.su/10#comment-54021</guid>
		<description>flock() не будет работать на NFS и многих других сетевых файловых системах. 
В некоторых операционных системах flock() реализован на уровне процессов. При использовании многопоточных серверных API, таких как ISAPI, нельзя полагаться на flock() для защиты ваших файлов от дугих PHP-скриптов, которые работают в параллельном потоке на том же сервере! 

flock() не поддерживается на старых файловых системах вроде FAT и его производных, так что всегда будет возвращать FALSE в этом окружении (это особенно касается пользователей Windows 98).</description>
		<content:encoded><![CDATA[<p>flock() не будет работать на NFS и многих других сетевых файловых системах.<br />
В некоторых операционных системах flock() реализован на уровне процессов. При использовании многопоточных серверных API, таких как ISAPI, нельзя полагаться на flock() для защиты ваших файлов от дугих PHP-скриптов, которые работают в параллельном потоке на том же сервере! </p>
<p>flock() не поддерживается на старых файловых системах вроде FAT и его производных, так что всегда будет возвращать FALSE в этом окружении (это особенно касается пользователей Windows 98).</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: Gennady</title>
		<link>http://www.linkexchanger.su/2008/10.html/comment-page-1#comment-40464</link>
		<dc:creator>Gennady</dc:creator>
		<pubDate>Wed, 14 Oct 2009 13:27:53 +0000</pubDate>
		<guid isPermaLink="false">http://www.linkexchanger.su/10#comment-40464</guid>
		<description>Сергей, если говорить о примере, то путь к файлу - это константа, которую определяете Вы, а не юзер. Если же говорить вообще - то статья не посвящена вопросам безопасности. Информации по обеспечению безопасности достаточно, нужно только поискать...</description>
		<content:encoded><![CDATA[<p>Сергей, если говорить о примере, то путь к файлу &#8211; это константа, которую определяете Вы, а не юзер. Если же говорить вообще &#8211; то статья не посвящена вопросам безопасности. Информации по обеспечению безопасности достаточно, нужно только поискать&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: Сергей</title>
		<link>http://www.linkexchanger.su/2008/10.html/comment-page-1#comment-40418</link>
		<dc:creator>Сергей</dc:creator>
		<pubDate>Wed, 14 Oct 2009 07:41:04 +0000</pubDate>
		<guid isPermaLink="false">http://www.linkexchanger.su/10#comment-40418</guid>
		<description>Очень помогли, спасибо!
только как проверить что ввел юзер, ну к примеру в путь к файлу он дописал ../../etc</description>
		<content:encoded><![CDATA[<p>Очень помогли, спасибо!<br />
только как проверить что ввел юзер, ну к примеру в путь к файлу он дописал ../../etc</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: Gennady</title>
		<link>http://www.linkexchanger.su/2008/10.html/comment-page-1#comment-34102</link>
		<dc:creator>Gennady</dc:creator>
		<pubDate>Wed, 09 Sep 2009 18:45:56 +0000</pubDate>
		<guid isPermaLink="false">http://www.linkexchanger.su/10#comment-34102</guid>
		<description>По первому вопросу, не буду обманывать, ничего не скажу, надо смотреть документацию.
По второму: некомфортно - приходится ждать, но это уже было связано с конкретно моей задачей. Приходилось не только отыскать нужную строку, но и разбить ее в массив по разделителю, произвести какие-либо операции, и &quot;положить&quot; на место. Иногда и не с одной строкой, а с группой. Поэтому....</description>
		<content:encoded><![CDATA[<p>По первому вопросу, не буду обманывать, ничего не скажу, надо смотреть документацию.<br />
По второму: некомфортно &#8211; приходится ждать, но это уже было связано с конкретно моей задачей. Приходилось не только отыскать нужную строку, но и разбить ее в массив по разделителю, произвести какие-либо операции, и &laquo;положить&raquo; на место. Иногда и не с одной строкой, а с группой. Поэтому&#8230;.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: pulsator</title>
		<link>http://www.linkexchanger.su/2008/10.html/comment-page-1#comment-34098</link>
		<dc:creator>pulsator</dc:creator>
		<pubDate>Wed, 09 Sep 2009 18:23:29 +0000</pubDate>
		<guid isPermaLink="false">http://www.linkexchanger.su/10#comment-34098</guid>
		<description>Вопрос то GENNADY
1. Вы говорите что работает на большом колличестве хостигах, а будет ли работать функция блокирования flock в файловых системах NTFS?
В документации PHP помоему написано про что функция блокирования flock работать небудет.  И как тогда быть?
2. Вы говорите что бы текстовый файл был небольших размеров, если больше &quot;становится некомфортно работать…&quot; Поясните пожалуйста что это означает? Будет зависать страница при загрузке или всетаки будут происходить ошибки связанные с записью?</description>
		<content:encoded><![CDATA[<p>Вопрос то GENNADY<br />
1. Вы говорите что работает на большом колличестве хостигах, а будет ли работать функция блокирования flock в файловых системах NTFS?<br />
В документации PHP помоему написано про что функция блокирования flock работать небудет.  И как тогда быть?<br />
2. Вы говорите что бы текстовый файл был небольших размеров, если больше &laquo;становится некомфортно работать…&raquo; Поясните пожалуйста что это означает? Будет зависать страница при загрузке или всетаки будут происходить ошибки связанные с записью?</p>
]]></content:encoded>
	</item>
</channel>
</rss>

