- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Укажите еще ОС и точную версию PHP (ts/nts). Попробую воспроизвести.
Не ваш ли это случай?
Склоняюсь к тому что, нет, т.к. в этом случае flock бы вообще не работал, а он работает и это проверено на практике, второй скрипт ждет выполнения 1го и только потом выполняется, из чего следует что flock работает.
ну это ты так думаешь, что 50 мб. на самом деле читаем не более 50 мб. формально даже для большого файла функция в праве вернуть 1 байт.
та же фигня и с fwrite(). он может не захотеть и не записать указанный размер.
используй базу данных и все будет хорошо.
Укажите еще ОС и точную версию PHP (ts/nts). Попробую воспроизвести.
В локалке
Windows 7 PHP 5.3.2
Хостинг
Линукс какойто PHP 5.2
Тут такое дело что получилось без ошибок выполнить код, но крайне странным способом:
после блокировки файла базы, я отвлекаю процесс от данного файла и немного работаю с другим, что угодно хоть содаю левый файл хоть что, и ошибка пропадает, в файл записывается ровно 2000 строк.
ну это ты так думаешь, что 50 мб.
Это ты думаешь, что я так думаю, но ты ошибаешся, там вообще и 10 мб не пахнет, не поверишь хватило ума написать с прозапасом.
Это ты думаешь, что я так думаю, но ты ошибаешся, там вообще и 10 мб не пахнет.
я абсолютно точно знаю, что такое использование fread и fwrite неправильное. это становится очевидно после прочтения документации.
влияет ли это или нет на описанную тобой проблему - мне думать лень.
я абсолютно точно знаю, что такое использование fread и fwrite неправильное. это становится очевидно после прочтения документации.
влияет ли это или нет на описанную тобой проблему - мне думать лень.
Было бы более внушительно если бы вы показали строку из мануала которая доказывает неправильное использование fread и fwrite в данном скрипте, т.к. я абсолютно точно знаю что все правильно и мои слова такие же пустые как и ваши без подтверждения фактами.
используй базу данных и все будет хорошо.
Если бы я хотел уйти от проблемы я бы это сделал, но я хочу ее решить.
http://php.net/manual/en/function.fread.php
не ровно length bytes, а именно ДО. так же и с fwrite.
обычно код с использованием fread/fwrite оборачивается в цикл. тут и разбираться не нужно - сразу видно потенциальную ошибку.
И эта ошибка может быть причиной наблюдаемого эффекта. А может и не быть.
netwind, И вы как бы не замечаете что написано далее:
fread() reads up to length bytes from the file pointer referenced by handle. Reading stops as soon as one of the following conditions is met:
1) length bytes have been read
2) EOF (end of file) is reached
Явно описано что второй вариант окончание чтения по окончании файла, тоесть если указано больше чем на самом деле чтение прекращается в момент когда заканчиваются данные, что подтверждает приемлимость использования того варианта который у меня в скрипте.
Но несмотря на это я использовал до этого $file=fread($fopen,filesize($fname)); что ситуацию ни как не меняет, подумал что он глючит и попробовал так как есть сейчас, разницы нет.
не ровно length bytes, а именно ДО. так же и с fwrite.
Да именно так и надо ДО, т.к. я знаю что более не будет исходя их этого и выбрал данное число, исходя из чего все ваши аргументы сработали получается только в подтверждение правильности моего метода.
Вы зацепились за комментарий который там вписан /* Читаем 50 Mb из файла */, но он написан от балды исключительно, чтобы не забыть что там до 50 а не до 5 или 500. Смысла другого я в него не вкладывал, а то что до 50 так тут ни кто не спорит, коммент неправильный, но вы то писали про сам метод использования fwrite fread которые применяются полностью в соответствии с мануалом.
Ink-developer, а остальные 2 случая кто будет читать? да мало ли по какой причине ему захочется вернуть меньше байт. В документации так же не написано, что есть гарантия на то что файл полностью считается за один вызов.
http://php.net/manual/en/function.fread.php
не ровно length bytes, а именно ДО. так же и с fwrite.
обычно код с использованием fread/fwrite оборачивается в цикл. тут и разбираться не нужно - сразу видно потенциальную ошибку.
И эта ошибка может быть причиной наблюдаемого эффекта. А может и не быть.
Кстати, заметил странную закономерность, что если запускать скрипт на запись в фал из двух вкладок браузера практически одновременно (запускал не его скрипт, а свой) то пишет в файл так, как будто запущен скрипт всего один раз. Причем пофиг что на платном хостинге, что на локальном компе.
Ради теста решил проверить какой результат выдает функция time(), получилось что даже при разнице в 2-3 секунды во времени запуска, время выдает одинаковое.
Тут же решил запустить тот же код но из разных файлов, и вот тут оказалось что работает все.
Странно как-то получается. А у него похоже к этому еще и накладываются ошибки его кода.