Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
arthyrgrex
0 / 0 / 0
Регистрация: 10.08.2015
Сообщений: 17
1

File_put_contents Failed to open stream Permission denied in

10.08.2015, 22:48. Просмотров 1231. Ответов 4
Метки нет (Все метки)

Всем привет

Больно не пинайте - поиском пользовался, гуглом тоже, даже с хостером решали проблему.., но проблема не исчезла:

Есть генератор текста (бессмысленного):
- генерится текст
- кладется в переменную $text
- далее из файла links.txt берутся 3 первые строки, выводятся после текста и удаляются

Кусок кода, который выводит ссылки после текста:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
 $row_number0 = 0;
     $row_number1 = 1;
     $row_number2 = 2;
     $links = file("links.txt");
     echo "$text";
         echo "$links[$row_number0]";
     echo "$links[$row_number1]";
     echo "$links[$row_number2]";
     unset($links[$row_number0]);
     unset($links[$row_number1]);
     unset($links[$row_number2]);
     file_put_contents("/var/www/arthyrgrex/data/www/site.com/gen/links.txt", implode("", $links), LOCK_EX);
Ошибка в следующем:
В файле links.txt содержится примерно 25000 ссылок.
Когда я обращаюсь к генератору (обращаюсь каждую секунду), чтобы сгенерить текст и ссылки - в файл links.txt должно сохраниться на 3 ссылки меньше. Так происходит в большинстве случаев.
Но часто бывает так, что в файле было 24000 ссылок - я обратился к генератору, а обратно в файл сохранилось не 23997 ссылок, а 14000 или вообще 0 ссылок.
Т.е. каким-то боком теряется содержимое переменной $links .

В логах следующая ситуация:
PHP
1
PHP Warning:  file_put_contents(links.txt): failed to open stream: Permission denied in /var/www/arthyrgrex/data/www/site.com/gen/gen.php on line 69
69 строка кода генератора - это:
PHP
1
 file_put_contents("/var/www/arthyrgrex/data/www/site.com/gen/links.txt", implode("", $links), LOCK_EX);
Якобы не хватает прав..
Обращался к хостеру, на что он мне ответил:
PHP
1
2
3
1. В функции file_put_contents использовать флаг LOCK_EX
2. Проверять содержимое переменной перед записью в файл, чтобы убедиться, что записывается не пустая переменная (например, используя функцию strlen()).
3. В файле /var/www/arthyrgrex/data/www/danissimo.tk/gen/gen.php перед строкой 69 добавить код, проверяющий не только переменную, но и наличие искомого файла по указанному адресу - if(is_file(адрес)){код}.
Права 777 и пользователя выставлял на /site.com/gen/links.txt (для файлов и папок).
Флаг LOCK_EX - использовал.

Но результат - тот же.
Либо пропадает большое количество ссылок, либо все сразу.
И такое происходит каждые 15 минут.


Огромная просьба подкинуть идей по решению данной проблемы!
Заранее благодарен
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.08.2015, 22:48
Ответы с готовыми решениями:

Failed to open stream: Permission denied
Как бороться с ошибкой? Права на файлы следующие: rw-rw-r--. Владелец rayzor. Сервер работает от...

fopen(text.htm): failed to open stream: Permission denied
У меня такая проблема, попробую объяснить.. Есть меню, там я кликаю на один пункт и открывается...

Warning: fopen(counter.txt): failed to open stream: Permission denied in
Вот такая бяка: закачал на фтп... Выполняю страницу, а оно пишет... Причем когда нормально тестю...

Warning: DOMDocument::save(index.xml): failed to open stream: Permission denied
Все добрый день! Возможно кто-либо сталкивался с такой проблемой. Решил изучить работу с XML...

"Failed to open stream: Permission denied", где ошибка?
Есть скрипт ротатора банеров. На денвере работает без ошибок. На хостинге после запуска скрипта...

4
pav1uxa
1888 / 1732 / 813
Регистрация: 23.01.2014
Сообщений: 6,132
Завершенные тесты: 1
11.08.2015, 01:57 2
Цитата Сообщение от arthyrgrex Посмотреть сообщение
Когда я обращаюсь к генератору (обращаюсь каждую секунду)
Каким образом? Просто обновляете страницу в браузере что ли? Может скрипт не успевает записать, а Вы уже следующий раз его запускаете?

Не по теме:

Цитата Сообщение от arthyrgrex Посмотреть сообщение
PHP
1
implode("", $links)
Вот это делать не обязательно. file_put_contents() сама выполняет это для массивов. То есть можно просто заменить на $links.

Цитата Сообщение от arthyrgrex Посмотреть сообщение
PHP
1
$links = file("links.txt");
А здесь лучше так:
PHP
1
$links = file("links.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
К проблеме это не относится. Просто исключит возможность попадания пустых строк и символов переноса строки.

0
arthyrgrex
0 / 0 / 0
Регистрация: 10.08.2015
Сообщений: 17
11.08.2015, 12:24  [ТС] 3
Цитата Сообщение от pav1uxa Посмотреть сообщение
Каким образом? Просто обновляете страницу в браузере что ли? Может скрипт не успевает записать, а Вы уже следующий раз его запускаете?
Обращаюсь обычным GET запросом.
Вернее это делает бот Гугла =)
Обращении практически каждую секунду.

Насчет
Цитата Сообщение от pav1uxa Посмотреть сообщение
implode("", $links)
заменить на
Цитата Сообщение от pav1uxa Посмотреть сообщение
$links
Спасибо - вроде хорошо работает.

Насчет
Цитата Сообщение от pav1uxa Посмотреть сообщение
$links = file("links.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES)
Пробовал заменить - линки вообще пропадают из файла, по этому вернул старый код.



Может эта проблема из-за слишком частого обращения бота к генератору и он просто не успевает манипулировать массивом в 25000 линков?
Может сократить массив в два раза?
0
pav1uxa
1888 / 1732 / 813
Регистрация: 23.01.2014
Сообщений: 6,132
Завершенные тесты: 1
11.08.2015, 12:58 4
Цитата Сообщение от arthyrgrex Посмотреть сообщение
Вернее это делает бот Гугла =)
Обращении практически каждую секунду.
Цитата Сообщение от arthyrgrex Посмотреть сообщение
Может эта проблема из-за слишком частого обращения бота к генератору и он просто не успевает манипулировать массивом в 25000 линков?
Может сократить массив в два раза?
Вероятно. Лучше вообще в БД хранить.

А что это за бот гугла такой, который каждую секунду к Вашему сайту обращается?..
0
arthyrgrex
0 / 0 / 0
Регистрация: 10.08.2015
Сообщений: 17
11.08.2015, 13:51  [ТС] 5
Обычный Googlebot 2.1 - паук индексатор.
Он обращается к генератору, а не к сайту )

Буду пробовать играться с массивом - может реально объем большой.
0
11.08.2015, 13:51
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.08.2015, 13:51

Ещё раз про ввод/вывод (failed to create stream: Permission denied in c:inetpubwwwroot)
Г-да. У меня есть связка PHP и IIS. Я пытаюсь сделать такую банальную вроде штуку. $fs =...

Ошибка file_get_contents failed to open stream: HTTP request failed
Внимание! В этом коде нет смысла и нет морали, поэтому если вы этого не ожидали читаем ниже: ...

Devel Studio. Ошибка "failed to open stream: HTTP request failed!" при использовании file_get_contents()
Начал писать в девел студио фейк и возникает проблемма со скриптом, я без понятия что не так,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru