fopen() не принимает имя файла
******** php-код ********
<?php
$lines = file("catalog.txt");
$row = $lines[0];
$fields = explode("|", $row);
$name = $fields[0];
$userid = $fields[3];
$msgfile = $name . $userid . ".txt";
echo $name;
echo "<BR>";
echo $userid;
echo "<BR>";
echo $msgfile;
echo "<BR>";
$fd = fopen($msgfile, "r");
fclose($fd);
echo "<H1> OK! </H1>";
?>
************ Листинг файла catalog.txt ***********
Иван|ivan@petrov.net|Москва|1166462395
Сашка|zero@mail.ru|Саранск|1166462400
lola|lola@yandex.ru|Москва|1166462445
Проблема этого кода вот в этой строке:
$msgfile = $name . $userid . ".txt";
Если имя файла составить показанным выше способом, то функция
fopen($msgfile, "r") не может открыть файл и ругается: failed to open stream: Invalid argument.
Однако, если имя файла указать явно:
$msgfile = "Иван" . "1166462395" . ".txt";
то файл открывается без проблем.
Вы понимаете почему? Я - нет!
Ты пробовал распечатать var_dump($msgfile)?
Цитата:
Ты пробовал распечатать var_dump($msgfile)?
Сделал var_dump, вот результат: string(20) "Иван1166462395 .txt"
А откуда пробел перед ".txt" ?
Цитата: assign
Сделал var_dump, вот результат: string(20) "Иван1166462395 .txt"
А откуда пробел перед ".txt" ?
А откуда пробел перед ".txt" ?
На конце каждой строки стоит ещё один символ - конец строки. Поэтому делай так:
Код:
$msgfile = trim($name) . trim($userid) . ".txt";
Вот она, вся сила var_dump()'а :D :D
Цитата:
$msgfile = trim($name) . trim($userid) . ".txt";
Ага! Я потом сам додумался до этого же решения. Только $name не пришлось через trim пропускать - и так прокатило.