Forum Webscript.Ru

Программирование => PHP => Тема начата: Sigma от 21 Января 2004, 17:00:09

Название: Ограничения ?
Отправлено: Sigma от 21 Января 2004, 17:00:09
вот есть так штука скажем

$fh1 = fopen ("text1.txt", "r");
while (!feof($fh1)) :
$text1 = fgets($fh1);
endwhile;
fclose($fh1);

$fh2 = fopen ("text2.txt", "r");
while (!feof($fh2)) :
$text2 = fgets($fh2);
endwhile;
fclose($fh2);

$fh3 = fopen ("text3.txt", "r");
while (!feof($fh3)) :
$text3 = fgets($fh3);
endwhile;
fclose($fh3);
?>

Вот есть такая штука, всё вроде ок, но почему-то когда я хочу вывести print "$text1"; print "$text2" и т.п. выводится только первая ? За раз только одну типа можно ? :)
Название: Ограничения ?
Отправлено: Макс от 21 Января 2004, 17:15:18
покажи как выводишь.

ЗЫ

$text1 = file_get_contents("text1.txt");
$text2 = file_get_contents("text2.txt");
$text3 = file_get_contents("text3.txt");
echo $text1."
".$text2."
".$text3;
?>
Название: Ограничения ?
Отправлено: Sigma от 21 Января 2004, 17:31:30
вывожу просто
print "$text1";
print "$text2";
print "$text3";

а вот предложенный пример просит функцию file_get_contents :(
Название: Ограничения ?
Отправлено: Макс от 21 Января 2004, 17:56:18
Цитировать
а вот предложенный пример просит функцию file_get_contents
значит у тебя ПХП старый (эта функция в 4.3.0 появилась).
Может последние два файла не читаются. Какой режим вывода ошибок ?
Название: Ограничения ?
Отправлено: Sigma от 21 Января 2004, 18:22:39
в смысле какой режим ? в начале кода стоит

ini_set(\'display_errors\', \'On\');
error_reporting(E_ALL)
?>
Название: Ограничения ?
Отправлено: AliMamed от 21 Января 2004, 18:45:50
$text1="";
$fh1 = fopen ("text1.txt", "r");
while (!feof($fh1)) :
$text1 .= fgets($fh1);
endwhile;
fclose($fh1);
Название: Ограничения ?
Отправлено: Макс от 21 Января 2004, 18:50:25
Странно. А в файлах вообще текст есть ? может пустые они ?

PS
ну и как вариант:
 $fh1 = fopen ("text1.txt", "r");
$text1 = fgets($fh1, filesize(\'text1.txt\'));
fclose($fh1);

$fh2 = fopen ("text2.txt", "r");
$text2 = fgets($fh2, filesize(\'text2.txt\'));
fclose($fh2);

$fh3 = fopen ("text3.txt", "r");
$text3 = fgets($fh3, filesize(\'text3.txt\'));
fclose($fh3);

echo $text1."
".$text2."
".$text3;
?>
Название: Ограничения ?
Отправлено: Sigma от 21 Января 2004, 19:26:21
с файлами всё ок, предложенный вариант с file_get_contents замечательно работает, просто на сервере php 4.0.какой-то :(
Название: Ограничения ?
Отправлено: FreeSpace от 21 Января 2004, 19:43:16
Sigma
Советую в блок объявления функций вставить вот такую штуку:
if (!function_exists(\'file_get_contents\'))
{
function file_get_contents ($filename)
{
if (!file_exists($filename) || !is_readable($filename))
{
return FALSE;
}

$fp = fopen($filename, \'rb\');
$content = fread($fp, filesize($filename));
fclose($fp);
return $content;
}
}
Таким образом, если скрипт сможет работать и на старой версии PHP, где функции [p]file_get_contents[/p] нету.
Домашнее задание: написать функцию [p]file_put_contents[/p], которая появится в PHP5.
Название: Ограничения ?
Отправлено: Sigma от 21 Января 2004, 19:55:27
предложенный вариант работает, спасибо всем :)
Название: Ограничения ?
Отправлено: Меняздесьдавнонет от 21 Января 2004, 21:01:28
Sigma
но ты хоть понял, почему у тебя в переменных только последняя строчка оказывалась? :-)

А что лучше файл читать целиком, а не по чайной ложке?
Название: Ограничения ?
Отправлено: Sigma от 21 Января 2004, 23:57:30
неа :)
Название: Ограничения ?
Отправлено: FreeSpace от 22 Января 2004, 00:16:54
Функция [p]fgets[/p] получает из файла только одну строчку.
Вызвал ты функцию в первый раз - получил первую строчку, во второй - вторую и т.д.
Если делать твоим способом, то fgets нужно было использовать в цикле:
$buffer = \'\';
while (!feof($fp))
{
    $buffer .= fgets($fp, 4096);
}
Название: Ограничения ?
Отправлено: Меняздесьдавнонет от 22 Января 2004, 00:20:07
что - даже второе?
неужели из банки в стакан быстрее чайной ложкой черпать, а не стаканом сразу зачерпнуть? Неужели это не очевидно?

А первое - ты же, черпая ложкой, в стакан не наливаешь.
Ты каждый раз набираешь в ложку, на место предыдущей, не накапливаешь. вот и есть в каждый момент не все, что начерпал, а последняя зачерпнутая ложка.
Название: Ограничения ?
Отправлено: Sigma от 22 Января 2004, 00:37:55
нет ну второе-то очевидно :)
После примера Freespace ясно и первое - сенкс :)