fopen не открывает уже созданный файл

Ekaterina

Новичок
fopen не открывает уже созданный файл

Использую WAMP.
Задача: записать в файл строку
Скрипт:
PHP:
$file = "e:\\localhost\\tmp\\ulp.txt";
//$file = "/tmp/ulp.txt";
//$file = "http://localhost/tmp/upl.txt";
//if (file_exists($file))
 //{ 	$f = fopen($file,"r+");
        $users_name = "admin:".md5(rand()); 
        fwrite($f,$users_name);
        fclose($f);
//}
Ошибка: "failed to open stream: No such file or directory in :\..\..\index.php on line 16"
Возможно это глупая ошибка, но я не знаю, как ее решить. Помогите, пожалуйста.
 

r4sh

Новичок
Файл не существует или недоступен для записи/чтения.. Попробуйте открывать с модификатором 'w+'.
Зачем был закомменчен код? В таком виде то он явно нерабочий.
 

Фанат

oncle terrible
Команда форума
при этом при выполнении fopen не закомментирован.
а вот путь к файлу \..\..\index.php у меня вызывает удивление
 

Ekaterina

Новичок
Автор оригинала: *****
при этом при выполнении fopen не закомментирован.
а вот путь к файлу \..\..\index.php у меня вызывает удивление
Не хотела писать полный путь к файлу. Сорри, что ввела в заблуждение.

Файл не существует или недоступен для записи/чтения.. Попробуйте открывать с модификатором 'w+'. Зачем был закомменчен код? В таком виде то он явно нерабочий.
Действительно вы правы насчет кода, просто при копировании я хотела закомментарить if, чтобы прочитать текст ошибки, поэтому $f = fopen($file,"r+"); нечаянно попал в коммент. А переменная $file закомментирована, просто как пример того, что я перепробовала разные варианты указания расположения файла. И ошибка явно не в этом. Файл существует, но php его не видит.
Заработал код с модификатором "а" , что не очень понятно:
"r+" - означает открыть для чтения и записи; поместить указатель в начало файла.
"а" - открыть для чтения и записи; поместить указатель в конец файла. Если файл не существует, делается попытка создать его.

Непонятно, почему скрипт не видит файл, который я создала руками. Он создал свой файл и записал в него данные, а тот файл, который я создала руками и пыталась писать в него - так и остался лежать рядом. Почему так происходит. объясните пожалуйста?
 

Фанат

oncle terrible
Команда форума
ну, если файл по пути /tmp/ulp.txt работает, а созданный руками лежит рядом, то путь e:\localhost\tmp\ulp.txt - точно неправильный.
Вообще, недостаточная компьютерная грамотность - бич современного пхп программиста.
 

r4sh

Новичок
Вообще, недостаточная компьютерная грамотность - бич современного пхп программиста.
Да не только php-программистов... Имхо, изначально следует изучать php в unix-like среде, как наиболее нативной для него.

Непонятно, почему скрипт не видит файл, который я создала руками. Он создал свой файл и записал в него данные, а тот файл, который я создала руками и пыталась писать в него - так и остался лежать рядом.
А Вы попробуйте из командной строки в этой папке создать файл через echo "" > e:\localhost\tmp\ulp.txt, а потом попробовать старый код.
 

Ekaterina

Новичок
Я разобралась:

Вот это мой рабочий код:
PHP:
  <?
//$file = "e:\\localhost\\tmp\\ulp.txt"; 
$file = "../tmp/ulp.txt";  
if (file_exists($file)) 
{    $f = fopen($file,"a");    
      $users_name = "uu:";    
      $user_password = md5(2);    
      $user_setting = $users_name.$user_password."\r\n";        
      fwrite($f,$user_setting);    
      fclose($f);    echo "Пользователь с именем ".$users_name. " успешно добавлен";
 } 
else  
{
   echo "Файл не существует"; 
}  ?>
Работают как относительный, так и абсолютный пути. Ошибка была в том, что я создала руками файл upl.txt, а через скрипт пыталась записать в ulp.php. Соответственно "r+" - не создает файл, если он не создан - выдавал ошибку. "а" - создает файл , если его нет. Что у меня и получилось.

Автор оригинала: *****
ну, если файл по пути /tmp/ulp.txt работает, а созданный руками лежит рядом, то путь e:\localhost\tmp\ulp.txt - точно неправильный.
Вообще, недостаточная компьютерная грамотность - бич современного пхп программиста.
Объясните, мне мою компьютерную безграмотность, пожалуйста. Я работала админом сайта и на php приходилось дописывать лишь маленькие кусочки, изучала его по книжке Котерова "PHP5". Возможно чего-то не дочитала. Теперь мне необходимо сделать авторизацию по сессиям, по введенному паролю и логину показывать конкретную страницу пользователю. БД - нет, пароли и логины хранятся в текстовом файле. Делаю первый раз. Можете мне посоветовать, где почитать, как это делается профессионально? Спасибо.
 

dimagolov

Новичок
Я работала админом сайта
странно слышать это после путаницы с windows/unix style в путях к файлам, ну да ладно.

про пароли в файле, кратко: в строчке храним логин (пробел не допустим), пробле, пароль или md5 от него. читаем построчно, бьем по пробелу, сравниваем имя. если авторизовались, то ставим флаг в сессии и потом проверяем.
 

Ekaterina

Новичок
Спасибо всем за помощь.


Автор оригинала: dimagolov
странно слышать это после путаницы с windows/unix style в путях к файлам, ну да ладно.
На моей конторе под администратором сайта понимают человека, занимающегося конетнтом сайта.
 

Фанат

oncle terrible
Команда форума
Объясните, мне мою компьютерную безграмотность, пожалуйста
что там объяснять?
/tmp/ и e:\localhost\tmp\ не могут быть одним и тем же каталогом.
То есть, какой-то из этих путей - неправильный.
то есть, автор не может написать нормально путь к файлу.
Работу с файловой системой я считаю одним из азов компьютерной грамотности.
Делаю первый раз. Можете мне посоветовать, где почитать, как это делается профессионально?
нет.
это невозможно.
и в первый раз, и в 5 последующих будет сделано любительски.
Где-то к может быть 10 начнется профессиональное.

залог успеха - разделение задач на подзадачи.
хранение паролей в файле
чтение паролей
обработка форм
работа с сессией
редактирование файла через форму
и т.д.

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

про сессии можно почитать на http://phpfaq.ru/session
 

Ekaterina

Новичок
Автор оригинала: *****
что там объяснять?
/tmp/ и e:\localhost\tmp\ не могут быть одним и тем же каталогом.
То есть, какой-то из этих путей - неправильный.
то есть, автор не может написать нормально путь к файлу.
Работу с файловой системой я считаю одним из азов компьютерной грамотности.
Вы правы, по незнанию я посчитала путь "/tmp/" относительным путем windows, но после прочтения Различие между относительными и абсолютными путями в файловой системе и на сайте - выяснилось ,что так обозначается абсолютный путь в Unix-системах.

нет.
это невозможно.
и в первый раз, и в 5 последующих будет сделано любительски.
Где-то к может быть 10 начнется профессиональное.

залог успеха - разделение задач на подзадачи.
хранение паролей в файле
чтение паролей
обработка форм
работа с сессией
редактирование файла через форму
и т.д.

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

про сессии можно почитать на http://phpfaq.ru/session
Просто в сети много реализаций авторизации, которые не слишком, но все же отличаются друг от друга. И поэтому сначала не знаешь, чего надо придерживаться. *****, спасибо за план действий и ссылку, начну изучать авторизацию с нее.
 
Сверху