|
|
|
| Мой сайт буквально насыщен скриптами, которые фиксируют очень много статистических параметров. В среднем, на одну страницу с текстом для посетителей приходится 32 файла со скриптами, причем иные по нескольку сотен строк. И возникает странная ситуация: когда я в качестве посетителя хожу по всем страницам в произвольном порядке, то фиксируется всё, что мне надо. И скрипт продажи паролей работает превосходно, и все процессы точно протоколируются.
А когда на сайте посетители, то время от времени обнаруживается, что параметры зафиксированы не все. А иной раз даже пароли куда-то исчезают (или не формируются).
Причина понятна - недетерминированное обращение к скриптам вызывает конфликты при обращении к текстовым файлам, в которых я храню собираемую статистическую информацию. Или же что-то подобное в этом роде.
Но как промоделировать эти сбои? Как найти конфликтные ситуации?
=======
То, что такая организация снижает быстродействие сайта, понятно. Но пусть пока что это обстоятельство останется без внимания – это временно. | |
|
|
|
|
|
|
|
для: Владимир55
(03.07.2008 в 14:50)
| | надо писать логи, и чем больше информации туда будет писаться - тем лучше
если скрипты используют для записи статистики общий файл, то обязательно нужно использовать блокировки (php flock()), особенно в таком случае, когда скрипты запускаются непоследовательно | |
|
|
|
|
|
|
|
для: mechanic
(03.07.2008 в 15:41)
| | К моему сожалению, я этого не делал. Ибо просто об этом не знал.
Посоветуйте, как это можно осуществить.
Типичная операция у меня выглядит так:
$abc = file_get_contents($adres);
// Здесь другие операции с переменной $abc, не связанные с открытие файлов
$file = fopen ($adres, "w") ;
fputs ($file, $abc) ;
fclose ($file) ;
|
Как я понимаю, на то время, пока будут осуществляться какие-то операции с переменной $abc, нужна исключительная блокировка доступа к файлу с адресом $adres.
А после окончания записи эту блокировку необходимо снять, чтобы с файлом могли работать другие скрипты.
Как это будет выглядеть применительно к данному примеру? | |
|
|
|
|
|
|
|
для: Владимир55
(03.07.2008 в 16:49)
| | вот пример отсюда http://ru2.php.net/manual/ru/function.flock.php
$fp = fopen("/tmp/lock.txt", "w+");
if (flock($fp, LOCK_EX)) { // выполнить эксплюзивное запирание
fwrite($fp, "Что-нибудь пишем\n");
flock($fp, LOCK_UN); // отпираем файл
} else {
echo "Не могу запереть файл !";
}
fclose($fp);
|
сам я с ней никогда не работал, поэтому особо не проконсультирую | |
|
|
|