Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Работа с файлами
 
 автор: diman   (19.09.2006 в 11:30)   письмо автору
1.8 Кб
 
 

Я никогда не работал с файлами. Хотел сначала для добавления данных товара в корзину использовать массив сессий, но так ничего и не получилось. Ну тогда я это потом разберусь, т. к. никто еще не смог мне в этом помочь. Тогда придумал хотя бы собирать все данные в файле. Но так как я с ними не работал, то мне хочется чтобы в созданном файле проверялись значения товара, и если этот товар уже существует (т. е. такая строка в файле уже есть) то запись не производить или удалять повторяющиеся записи. Помогите пожалуйста это осуществить.
Прикрепляю свой файл.

   
 
 автор: ec_stasis   (19.09.2006 в 11:43)   письмо автору
1.6 Кб
 
   для: diman   (19.09.2006 в 11:30)
 

Вот, что-то типа этого

   
 
 автор: Diman   (19.09.2006 в 12:03)   письмо автору
 
   для: ec_stasis   (19.09.2006 в 11:43)
 

Что делает функция file()? Пишет ошибку о несуществовании такого файла.

   
 
 автор: ec_stasis   (19.09.2006 в 12:11)   письмо автору
 
   для: Diman   (19.09.2006 в 12:03)
 

Функция помещает данные из файла в массив, каждый элемент - одна строка.
Значит неверно имя файла. Вроде брал из твоего кода

   
 
 автор: Diman   (19.09.2006 в 12:24)   письмо автору
 
   для: ec_stasis   (19.09.2006 в 12:11)
 

С этим можно и поиграть. Но тогда наверное следует вначеле открыть файл. Файл сам создается. Но ошибка осталась прежняя:
Can't open Гость.txt: php_errormsg

          $product=$prod['kod']."/".$prod['name']."/".$prod['price']."<br>";
           $name_file=$_SESSION['login'].".txt";
           $fp = fopen('admin/file/'.$name_file, 'a')
                   or die("Can't open $name_file:php_errormsg");
           $korzina = file('admin/file/'.$name_file)
                  or die("Can't open $name_file:php_errormsg");
           if (!in_array($product . "\n", $korzina))
           {

             fwrite($fp, $product . "\n");
             fclose($fp);
           }

   
 
 автор: ec_stasis   (19.09.2006 в 13:07)   письмо автору
 
   для: Diman   (19.09.2006 в 12:24)
 

Нет, наверное, надо вначеле вызывать File(), а потом открывать файл.
сделай так, и увидишь, где не открывается файл (1 или 2).
Тут 2 варианта:
если нет файла - то 1;
если файл есть, но ты его открыл на запись, то 2

          $product=$prod['kod']."/".$prod['name']."/".$prod['price']."<br>";
           $name_file=$_SESSION['login'].".txt";
           $fp = fopen('admin/file/'.$name_file, 'a')
                   or die("1: Can't open $name_file: $php_errormsg");
           $korzina = file('admin/file/'.$name_file)
                  or die("2: Can't open $name_file: $php_errormsg");
           if (!in_array($product . "\n", $korzina))
           {

             fwrite($fp, $product . "\n");
             fclose($fp);
           } 

   
 
 автор: ec_stasis   (19.09.2006 в 13:09)   письмо автору
 
   для: ec_stasis   (19.09.2006 в 13:07)
 

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

   
 
 автор: Diman   (19.09.2006 в 15:49)   письмо автору
 
   для: ec_stasis   (19.09.2006 в 13:09)
 

Ничего не могу понять. Файл действительно есть. Да, и он открыт действительно на запись. Для чего же он мне еще нужен, именно для записи. Именно возникает ошибка при использовании функции file(). Помогите кто-нибудь, а?

   
 
 автор: cheops   (19.09.2006 в 18:33)   письмо автору
 
   для: Diman   (19.09.2006 в 15:49)
 

А в сообщении об ошибке кроме "Can't open" есть что-то ещё? Как точно оно выглядит в оригинале?

   
 
 автор: Diman   (20.09.2006 в 07:44)   письмо автору
 
   для: cheops   (19.09.2006 в 18:33)
 

Функция $php_errormsg вообще не срабатывает. Действует как какая-то простая переменная, а хотелось бы действительно увидеть в чем ошибка.

   
 
 автор: Diman   (20.09.2006 в 11:37)   письмо автору
 
   для: Diman   (20.09.2006 в 07:44)
 

Ну что, мне кто-нибудь поможет? Если не получается с этим вариантом, то предложите другой.

   
 
 автор: cheops   (20.09.2006 в 12:48)   письмо автору
 
   для: Diman   (20.09.2006 в 07:44)
 

А дело где происходит на хостинге или локальной машине?

   
 
 автор: Diman   (20.09.2006 в 13:17)   письмо автору
 
   для: cheops   (20.09.2006 в 12:48)
 

На локальной машине.
Теперь заметил следующее. Если же в файле сперва что-либо прописать, поставить пробел или еще что-то, то все работает. Как сделать так, чтобы файл создавался в самом начале, при входе в систему. Если использовать в главном файле fopen() это поможет?
А лучше как создать временный файл и сколько он существует? Так как я хочу данные из массива $korzina присвоить массиву $_SESSION['korzina']. Я пытался это сделать без файлов, но чтож, придется обходить эту вещь таким путем.

   
 
 автор: cheops   (20.09.2006 в 13:25)   письмо автору
 
   для: Diman   (20.09.2006 в 13:17)
 

А у вас Apache из под какого пользователя запущен? Администратора или System?

   
 
 автор: Diman   (20.09.2006 в 13:28)   письмо автору
 
   для: cheops   (20.09.2006 в 13:25)
 

Администратора

   
 
 автор: cheops   (20.09.2006 в 13:37)   письмо автору
 
   для: Diman   (20.09.2006 в 13:28)
 

Хм... странно, а версии PHP и Apache какие?

   
 
 автор: ec_stasis   (20.09.2006 в 13:51)   письмо автору
 
   для: Diman   (20.09.2006 в 07:44)
 

$php_errormsg - это не функция, а переменная. Определяется только в том случае, если в настройках пхп (пхп.ини) директива track_errors = On.
А для того, чтобы видеть ошибки можно
display_errors = On
Error_reporting = E_ALL

   
 
 автор: ec_stasis   (20.09.2006 в 13:56)   письмо автору
 
   для: Diman   (19.09.2006 в 15:49)
 

Он тебе еще нужен для чтения, чтобы узнать что в корзине :). file() - как раз и есть чтение.

   
 
 автор: Diman   (20.09.2006 в 14:22)   письмо автору
 
   для: ec_stasis   (20.09.2006 в 13:56)
 

Включил
track_errors = On

Пишет
A session had already been started - ignoring session_start()

Вот теперь всё ясно. Значит ему мешают сессии. Ну что ж, буду создавать вначале главной страницы файл, пропишу в него пустую строку и всё будет Ok.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования