Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Не удается записать в файл


Автор: slang 29.7.2005, 22:50
Не выполняется код:
Код

$quote="C:\quote.txt";
$file_quote=fopen($quote,'w+');
fclose($file_quote);


хотя хотелось-бы:

Код

$quote="quote.txt";
$file_quote=fopen($quote,'w+');
fclose($file_quote);


Я так понимаю, проблема в правах на запись, как эту проблему, если я прав, решить?

Выдается ошибка:
Цитата

Warning: fopen(C:\quote.txt): failed to open stream: Permission denied in /home/ххх/public_html/ххх/read-quote.php on line 10

На локальной машине все выполняется, а вот на стороне сервера - ...

Автор: Mal Hack 29.7.2005, 23:06
Да, нет прав.
Кстати, на Юникс системе нет понятия дисков, так что запись c:/ тебе ничего не даст.
Для Вин систем надо вставлять вставку file://c:/fikle.txt

Автор: slang 29.7.2005, 23:09
Т.е. нужно ручками создать файл и ручками задать ему права. Это временнный файл, который имеет ценность пока выполнятся несколько скриптов. Можно-ли передать от скрипта к скрипту информацию, при этом скрипт будет выполняться автоматом (CRON), а не запускатся пользователем, имеет-ли это значение - не знаю, ни разу cron не пользовался.
Добавлено @ 23:10
Mal Hack
для скрипта, выполняющегося на стороне сервера и нет C:/

Автор: Mal Hack 29.7.2005, 23:15
Цитата(slang @ 30.7.2005, 00:09)
Т.е. нужно ручками создать файл и ручками задать ему права. Это временнный файл, который имеет ценность пока выполнятся несколько скриптов. Можно-ли передать от скрипта к скрипту информацию, при этом скрипт будет выполняться автоматом (CRON), а не запускатся пользователем, имеет-ли это значение - не знаю, ни разу cron не пользовался.

Так. Чую я что ты замудрил больно. Опиши русским языком что ты делаешь и для каких данных планируешь временный файл делать.

Цитата(slang @ 30.7.2005, 00:09)
для скрипта, выполняющегося на стороне сервера и нет C:/

Если сервер на Юникс smile

Автор: slang 29.7.2005, 23:34
Значит так:
в одном скрипте - получаю информацию с другого сайта в виде массива строчек;
в следующем обрабатываю эти строчки - достаю необходимую мне информацию;
в последнем - отправляю эту информацию на несколько (не определено сколько) mail-адресов. Адреса хранятся или в базе или в файле - не суть важно.
Начальные данные беру с
http://www.forexite.com/wap/default.wml
затем засовываю все это дело в массив:
Код

<?php
$url_quote="http://www.forexite.com/wap/default.wml";
@ $file_http=fopen($url_quote, 'r');
if(!$file_http){
  exit;
}
else
{
while(!feof($file_http)){
  $string[]=fgets($file_http);
}
fclose($file_http);
}
$url_quote="http://www.forexite.com/wap/new.wml";
@ $file_http=fopen($url_quote, 'r');
if(!$file_http){
  exit;
}
else
{
while(!feof($file_http)){
  $string[]=fgets($file_http);
}
fclose($file_http);
}

?>

Теперь, когда есть вся необходимая информация, мне необходимо передать это содержимое другому скрипту, который в зависимости от различных параметров создаст сообщение, которое необходимо будет передать по электронной почте.
Скрипт запускается, например, раз в минут и присылает сообщение.

Автор: Mal Hack 29.7.2005, 23:41
1. В соседней теме я тебе сказал, как нужно данные с удаленных файлов получать
2. Что касается файла и 3 скрипта. Да, он идет в крон.
Но...
Ты делаешь один файл в тойже папке, что и остальные.
При записи в него параметров, ты смотришь, если там что-то есть, то ДОписываем, если нет, то ПЕРЕзаписываем файл.

В скрипте отсылки данных, после того, как мы отправили данные мы файл очищаем.

При этом очень важно использовать жесткую блокировку flock в обоих файлах, чтобы не было проблем.

Автор: slang 29.7.2005, 23:55
Как получить данные - я разобрался, как проанализировать и создать необходимое сообщение - тоже, но мне нужно передать информацию, полученную со стороны - скрипту, который выбирает только ту инфу, которая мне нужна, в моем случае - только котировки, а затем эти котировки передать скрипту - отправителю. Все это можно сделать и в одном скрипте, но я пользуюсь несколькими адресами в разное время, поэтому этот нюанс нужно обрабатывать отдельно, мне не нужно получать все котировки в конкретный промежуток времени, этот нюанс тоже нужно обрабатывать и т.д. По этой причине я и хочу разбить все стадии обработки на разные скрипты, просто мне так удобнее и понятнее, а для этого мне и нужно сохранить промежуточные данные в каком-либо файле или еще где. Как вариант можно использовать, просто GET или создать таблицу в базе для этой информации, но с файлом - тоже хотелось-бы разобраться. А файл на стороне сервера я не могу создать/редактировать из скрипта. Как мне назначить необходимые права? И какие права - необходимы?

Автор: Mal Hack 30.7.2005, 00:08
slang ты понял алгоритм, который я говорил выше:
Файл ты создаешь fopen("./text.txt"); и адльше к нему 3 скриптом обращаешься.

Автор: slang 30.7.2005, 00:14
Как раз создать файл у меня и не получается, пишет:
Цитата

Warning: fopen(./text.txt): failed to open stream: Permission denied in /home/kidalovo/public_html/sms/read-quote.php on line 10

в строчке:
Код

$file_quote=fopen("./text.txt", "w");


Автор: Mal Hack 30.7.2005, 00:36
Ясно. Установи на папку права 755, хотя придется скорее всего ставить 777. НО это плохо. Хостер не хороший.

Автор: mr.Anderson 30.7.2005, 12:21
Почему не хороший? У меня точно такая ж проблема была. Права надо ставить 777, и не на папку, а на файл, который надо открыть.

Автор: Mal Hack 30.7.2005, 12:34
sim7 и как ты поставишь права еще не созданному файлу ;)

Цитата(sim7 @ 30.7.2005, 13:21)
Почему не хороший?

А потому что права 0777 дают много возможностей сторонним пользователям, что не есть хорошо.

Автор: slang 3.8.2005, 12:38
Я разместил папку, в которой хранятся эти файлы за пределами public_html (www). Таким образом получается, что эти файлы не доступны для клиентов и доступны только для скриптов. Думаю, что это достаточно безопасно?

Автор: Mal Hack 3.8.2005, 13:58
Цитата(slang @ 3.8.2005, 13:38)
Я разместил папку, в которой хранятся эти файлы за пределами public_html (www). Таким образом получается, что эти файлы не доступны для клиентов и доступны только для скриптов. Думаю, что это достаточно безопасно?

Да, несомненно. Только надо теперь смотреть, чтобы пользователи не могли воспользоваться скриптами, которые имеют доступ за www smile

Автор: mr.Anderson 3.8.2005, 17:40
Цитата
sim7 и как ты поставишь права еще не созданному файлу ;)

Пардон, не учел. smile
А как эти самые сторонние пользователи смогут влезть в эту общедоступную папку? Она ж в админке находится, значит, им придется админку ломать, что ли?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)