Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: как открыть и записать массив в файл
Форумы портала PHP.SU » PHP » Программирование на PHP » как открыть и записать массив в файл

Страниц (2): [1] 2 »
 

1. polly - 08 Сентября, 2010 - 11:44:41 - перейти к сообщению
привет всем

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

include ($file);
//файл с комментами, там массив называется tofil
unset ($tofil[1]);
//удаляет без проблем

$fw=fopen ($file, "w");
fwrite($fw, $tofil);
// проблемы с записью

fclose($fw);

в файл пишется слово Array... а мне нужно, чтобы было записано содержание массива. думала про compact или extract, но че-то не помогло.
что делаю не так? как записать в файл содержание массива?
2. garvey - 08 Сентября, 2010 - 12:10:31 - перейти к сообщению
Циклом нужно пройтись по элементам массива(foreach удобней в этом случае).
3. biperch - 08 Сентября, 2010 - 15:56:41 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3.  
  4. foreach($tofil as $key=>$value){
  5.  
  6.  
  7.  
  8. fwrite($fw, $value);
  9.  
  10. }
  11.  
  12.  
  13.  
  14.  
4. polly - 08 Сентября, 2010 - 16:20:48 - перейти к сообщению
ребята, спасибо за идею

biperch, не прокатывает - там надо как-то хитро открывать файл - когда первый элемент массива, то w, когда все остальные - а.

шаманю дальше...
5. Nestor - 08 Сентября, 2010 - 16:32:24 - перейти к сообщению
6. polly - 09 Сентября, 2010 - 10:53:37 - перейти к сообщению
Nestor, var_export, var_dump - это по ходу аналоги print_r, они не преобразовывают массив, а просто выводят, так что в файл в таком случае ничего не пишется...
шаманю дальше
7. polly - 09 Сентября, 2010 - 13:21:48 - перейти к сообщению
это АДЪ!!!

$all=count($tofil);

if ($nomer==0)
{

if ($all==0)
{
$fw=fopen ($file, "w");
fwrite($fw, '');
}


foreach ($tofil as $key => $value)
{
if ($key==1)
{
$fw=fopen ($file, "w");
fwrite($fw, '<?php $tofil[]="'.$value.'";?>');
}
else
{
$fw=fopen ($file, "a");
fwrite($fw, '<?php $tofil[]="'.$value.'";?>');
}
}

}
else{
foreach ($tofil as $key => $value)
{
if ($key==0)
{
$fw=fopen ($file, "w");
fwrite($fw, '<?php $tofil[]="'.$value.'";?>');
}
else
{
$fw=fopen ($file, "a");
fwrite($fw, '<?php $tofil[]="'.$value.'";?>');
}
}
}

зато работает)
мда... массивы в пхп - это явно не для слабонервных, в пору прикручивать mysql, если там легче...
8. ALEN - 09 Сентября, 2010 - 13:29:52 - перейти к сообщению
serialize крутая штука)))
9. polly - 09 Сентября, 2010 - 13:32:54 - перейти к сообщению
сериалайз упаковывает, я потом из файла читаю всякий бред (дополнительные цифорки там и все такое))
10. ALEN - 09 Сентября, 2010 - 13:35:33 - перейти к сообщению
$array=unserialize(base64_decode(implode("",file($file))));

$textarray=base64_encode(serialize($array));
fopen($file,"a+");
flock($f,LOCK_EX);
ftruncate($f, 0);
fwrite($f,$textarray);
fflush($f);
flock($f,LOCK_UN);
fclose($f);
(Добавление)
Прямые руки исправляют все проблемы, а serialize самый идеальный вариант
(Добавление)
А еще всегда нужно правильно работать с кодировками
11. polly - 09 Сентября, 2010 - 13:47:57 - перейти к сообщению
а еще можно не кичиться прямотой своих рук перед блондинкой, которая села писать движок с нуля и ваще не программер ни разу, чего в принципе не скрываю.
12. ALEN - 09 Сентября, 2010 - 13:51:45 - перейти к сообщению
Тогда извини))) Только не сдавай, что serialize не подходит )))
13. polly - 09 Сентября, 2010 - 13:56:58 - перейти к сообщению
ок) ааа... то есть тот код ты написал в надежде, что его разбирать никто не будет, а если и будет, то мозг взорвется??)))) XD
14. ALEN - 09 Сентября, 2010 - 14:05:59 - перейти к сообщению
Нет там готовые элементы:

$array=unserialize(base64_decode(implode("",file($file))));

тут читаем наш файл $file , раскодируем его с помощью base64_decode и разбираем его как закодированный unserialize

далее нам нужно записать его в файл:

$textarray=base64_encode(serialize($array));

тут кодируем наш массив $array с помощью serialize , далее полученую строку кодируем с помощью base64_encode для не читаемого вида, который позволит избежать некоторых плохих моментов.

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

fopen($file,"a+");
flock($f,LOCK_EX);
ftruncate($f, 0);
fwrite($f,$textarray);
fflush($f);
flock($f,LOCK_UN);
fclose($f);
15. polly - 09 Сентября, 2010 - 14:24:42 - перейти к сообщению
я, конечно, попробовала, но пока оставлю свой адъцкий вариант);)

 

Powered by ExBB FM 1.0 RC1