Почему не раб счетчик? Код (Text): <?php class file { var $file; var $bufer; function __construct($files) { //open file from directory $this->file=fopen($files,"r+"); if(!$this->file) { echo "Error open file"; } } function bufer () { // here view $this->bufer =fread($this->file,100); } function prints() { echo $this->bufer; echo "<br>"; } function __destruct() { fclose($this->file); } } class file2 extends file { function write($text) { fputs($this->file,$text); } function counts() { $total = 0; while(!feof($this->file)) { $str = fgets($this->file); $total++; } echo $total; } } $one = new file2 ("file.txt"); $one->bufer(); $one->prints(); echo"<br>"; $one->counts(); echo"<br>"; $text="best PHP"; $one->write($text); ?>
Никогда не думал, что 3х строковый счетчик можно расписать на строк 50, да и еще применить непроцедурный подход...
ergocom Потому что всякие умники городят классы там, где можно без функций даже обойтись... Как Java прям... Вся фишка в том, что этот код можно заменить таким: PHP: <?php file_put_contents('total.txt',(@file_get_contents('total.txt')+1)); //Подсчет echo file_get_contents('total.txt'); //Вывод ?> :lol:
Kreker Зато две строчки!! =) Можно конечно сделать так: PHP: <?php echo $total=@file_get_contents('total.txt'); //Вывод file_put_contents('total.txt',++$total); //Подсчет ?> Но не прикольно что считается хит после вывода...
[vs] Две строчки хорошо, но не всегда может быть работе. Файл надо блокировать на время записи. Вообще fgc & fpc используются не для совместных действий. То есть, когда надо только прочитать или только записать в файл. Эти функции комбинации fopen, fwrite/fread/fclose. Про три строчки я, конечно, иронизировал. PHP: <?php $contfil = fopen("G:\home\counter.txt","a+"); flock($contfil,LOCK_EX); $counter = ((int)fread($contfil, 1024))+1; ftruncate($contfil, 0); fwrite($contfil,$counter); flock($contfil, LOCK_UN); fclose($contfil); echo $counter; ?> Я могу ошибаться насчет рациональности. Мой вариант не удобен для чтения, но может и более быстр. В твоем варианте, если я не ошибаюсь, можно обойтись без подавителя ошибок, если передать необходимый параметр функции. Да и кстати, можно и увеличивать хит перед выводом.
Мой выполняет 100.000 циклов в среднем за 25.13 сек. А ты свой на работоспособность и корректность работы проверял? :lol:
Не проверял. Это старый + добавил кое чего. Сейчас поправлю, я там напакостил. Просто не иррационально закрыть файл и тут же его открыть. Да и могут быть ошибки в подсчетах из-за одновременного открытия разными юзерами.
[vs] первый кусочек был приятнее второго =) просто можно было чуток подправить PHP: <?php file_put_contents( $filename='total.txt', (($cnt=(int)@file_get_contents($filename))+1) ); //Подсчет echo $cnt."\n"; //Вывод ?> а на блокировки при таких счетчиках на сайте можно забить - такие решения на нагруженных проектах быть не могут.... =)))
avm АААААА!!! До меня дошла гениальная мысль!!! ФУНКЦИЯ PRINT ВОЗВРАЩАЕТ ЕДЕНИЦУ!! Гы, счетчик хитов вместе с выводом в одну строку! PHP: <?php file_put_contents($filename='total.txt',(($cnt=(int)@file_get_contents($filename))+print $cnt) ); //Подсчет и вывод ;) ?> =)))))))))))))))))))