|
|
|
| Здравствуйте!
Есть файл news.txt. Такого формата: n_id#title#img#address
Где n_id-цифра - например, как в mysql айдишник c auto increment и т.д, title - заголовок новости, img - картина (ее адрес), address - адрес файла с текстом новости.
В общем, файл, где # - разделитель...
Например, в файле news.txt такие строки:
1#Softtime Rules 1#img/st1.jpg#rus/st1.txt
2#Softtime Rules 2#img/st2.jpg#rus/st2.txt
3#Softtime Rules 3#img/st3.jpg#rus/st3.txt
4#Softtime Rules 4#img/st4.jpg#rus/st4.txt
5#Softtime Rules 5#img/st5.jpg#rus/st5.txt
|
Есть страница, например, news.php. Методом GET передается id. Если !isset($id), то выводятся заголовок и картинка новости. Иначе выводится сама новость, т.е. текст из файла, address которого есть в вышеупомянутой текстовой базе данных. Сам php файл идет в аттаче.
Реализовывая все это столкнулся с двумя проблемами.
1. в файле есть код, реализующий поиск в массиве. Может, есть более быстрый и удобный способ?
2. если не задан айдишник, то формируются ссылки такого типа: news.php?id=1. Когда я нажимаю на такую ссылку, php ругается: Warning: file_get_contents(rus/st1.txt ) [function.file-get-contents]: failed to open stream: Invalid argument in... Когда news.php?id=5 (id=последняя запись в news.php) все выводится...
Все файлы на своем месте, все адреса в текстово БД прописаны правильно. Помогите разобраться почему PHP ругается. | |
|
|
|
|
|
|
|
для: Alex Kraft
(09.07.2006 в 00:15)
| | Вот только что поэксперементировал с кодом. Если к каждой строке файла приписать в самом конце разделитель(#), то все выводится/читается нормально. Если можно, то объясните почему так получается... Я с файлами мало работал, все болье с MySQL...
1#Softtime Rules 1#img/st1.jpg#rus/st1.txt#
2#Softtime Rules 2#img/st2.jpg#rus/st2.txt#
3#Softtime Rules 3#img/st3.jpg#rus/st3.txt#
4#Softtime Rules 4#img/st4.jpg#rus/st4.txt#
5#Softtime Rules 5#img/st5.jpg#rus/st5.txt#
|
Файл на данный момент пишется в ручную. | |
|
|
|
|
|
|
|
для: Alex Kraft
(09.07.2006 в 01:33)
| | А у вас какой код извлекает строки из файла и разбивает их на элементы? | |
|
|
|
|
|
|
|
для: cheops
(09.07.2006 в 11:04)
| | Тот, который в аттаче:
$array = file('rus/news.txt');
$array = array_reverse($array);
foreach($array as $ar)
{
if($exp = explode('#', $ar))
{
$nid = $exp[0];
$title = $exp[1];
$img = $exp[2];
$link = $exp[3];
echo '<b>['.$nid.']</b> '.$title.'<br> <a href="news.php?id='.$nid.'"><img src="'.$img.'" width="300" height="300" /></a><br /><br />';
}
}
|
Этот код выводит список новостей... | |
|
|
|
|
|
|
|
для: Alex Kraft
(09.07.2006 в 01:33)
| | Если нуменация в файле начинается с одного - можно намного упростить, точнее ускорить код.
<?
$array = file();
if(!isset($_GET['id']) OR !ctype_digit($_GET['id']) OR $_GET['id']<1){
$array = array_reverse($array);
foreach($array as $ar)
{
if($exp = explode('#', $ar)){
$nid = $exp[0];
$title = $exp[1];
$img = $exp[2];
$link = $exp[3];
echo '<b>['.$nid.']</b> '.$title.'<br> <a href="news.php?id='.$nid.'"><img src="'.$img.'" width="300" height="300" /></a><br /><br />';
}; // Explode
}; // foreach
die(); // Stop script execution
} // Isset $_GET['id']
else{ // Isset $_GET['id']
if($exp = explode('#', $array[$_GET['id']-1])){
echo $exp[0].' - '.$exp[1].'<br>';
$content = file_get_contents($exp[3]);
$content = nl2br($content);
echo $content;}; // Explode
} // Isset $_GET['id']
|
| |
|
|
|
|
|
|
|
для: Alex Kraft
(09.07.2006 в 00:15)
| | В аттаче:
У вас:
Надо
Название переменной указанно не верно | |
|
|
|