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

Форум PHP

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

 

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

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

тема: Чтение файла из директории, с заменой строк
 
 автор: julpierto   (20.02.2011 в 14:26)   письмо автору
 
 

Подскажите пожалуйста, как заставить скрипт работать:

- задача в том, чтобы открыть поочередно (файлов там несколько) файл html из директории '/pages' в корне, как массив, затем дописать в него, вместо тега </body>, некоторое колличество ссылок из файла links.txt, дописав </body> обратно.

<?php

$handle 
opendir('./pages');

while (
false !== ($file readdir($handle))) {

if (
$file != "." && $file != "..") { 

$read file('./pages/'.$file); // читает нужный файл, как массив

z++;
 
$links file('links.txt');    // читает файл links.txt, как массив 

shuffle($links);   // перемешивает

$links array_slice($links,0,rand(5,10)); //берет от 5 до 10 ссылок

$links implode(" ",$links);

$new_file str_replace('</body>',$links.'</body>',$read); // производит замену

       
}
}

?>


Заранее благодарен!

  Ответить  
 
 автор: sim5   (20.02.2011 в 14:52)   письмо автору
 
   для: julpierto   (20.02.2011 в 14:26)
 

Открыть файл как массив функцией file() можно, но вы уверены, что html-файл у вас будет прочитан как необходимый вам массив?

  Ответить  
 
 автор: julpierto   (20.02.2011 в 14:56)   письмо автору
 
   для: sim5   (20.02.2011 в 14:52)
 

Вообще-то не уверен, но как еще можно открыть html файл, не изменив его структуры?

  Ответить  
 
 автор: sim5   (20.02.2011 в 15:33)   письмо автору
 
   для: julpierto   (20.02.2011 в 14:56)
 

Считывайте весь файл, readfile, и в содержимом делайте замену.

[поправлено модератором]

  Ответить  
 
 автор: julpierto   (20.02.2011 в 15:51)   письмо автору
 
   для: sim5   (20.02.2011 в 15:33)
 

Написал такой скриптик для проверки

<?php

$handle 
opendir('./pages');

while (
false !== ($file readdir($handle))) {

if (
$file != "." && $file != "..") { 

$read readfile('./pages/'.$file); // читает нужный файл

echo $read;

       }
}

?> 


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

  Ответить  
 
 автор: julpierto   (20.02.2011 в 15:56)   письмо автору
 
   для: julpierto   (20.02.2011 в 15:51)
 

Доработал скрипт, но к сожалению выдает синтаксическую ошибку в строке 9 (z++;), как сделать правильно счетчик в данном случае?

<?php

$handle 
opendir('./pages');

while (
false !== ($file readdir($handle))) {

if (
$file != "." && $file != "..") { 

z++;
 
echo 
$file.'<br>';
 
$read readfile('./pages/'.$file); // читает нужный файл
 
$links readfile('links.txt');    // читает файл links.txt

shuffle($links);   // перемешивает

$links array_slice($links,0,rand(5,10)); //берет от 5 до 10 ссылок

$links implode(" ",$links);

$new_file str_replace('</body>',$links.'</body>',$read); // производит замену

if $new_file fopen("$new_file","w+");

{
   echo 
'сюсефулли камплитед';
}

else echo 
'ошибка открытия файла';

fclose($new_file);

       }
}

?>

  Ответить  
 
 автор: sim5   (20.02.2011 в 16:11)   письмо автору
 
   для: julpierto   (20.02.2011 в 15:56)
 

Счетчик чего? И что это вообще такое z? Такого быть не может в РНР, может быть $z.

  Ответить  
 
 автор: julpierto   (20.02.2011 в 16:28)   письмо автору
 
   для: sim5   (20.02.2011 в 16:11)
 

Спасибо за замечание! не пойму как правильно организовать переход на новый файл?

<?php

$handle 
opendir('./pages');

while (
false !== ($file readdir($handle))) {

if (
$file != "." && $file != "..") { 

break;
 
echo 
$file.'<br>';
 
$read readfile('./pages/'.$file); // читает нужный файл 
 
$links readfile('links.txt');    // читает файл links.txt

shuffle($links);   // перемешивает

$links array_slice($links,0,rand(5,10)); //берет от 5 до 10 ссылок

$links implode(" ",$links);

$new_file str_replace('</body>',$links.'</body>',$read); // производит замену

if ($new_file fopen("$new_file","w+"));

{
   echo 
'сюсефулли камплитед';
}

else echo 
'ошибка открытия файла';

fclose($new_file);

       }
$z++;       
       
}

?>

теперь ругается на unexpected T_ELSE в строке
else echo 'ошибка открытия файла';

  Ответить  
 
 автор: sim5   (20.02.2011 в 17:30)   письмо автору
 
   для: julpierto   (20.02.2011 в 16:28)
 

[поправлено модератором]

  Ответить  
 
 автор: julpierto   (20.02.2011 в 17:46)   письмо автору
 
   для: sim5   (20.02.2011 в 17:30)
 

Да, в данном случае статические странички.
Пытаюсь сделать приложение на php, чтобы не обрабатывать это дело действительно "варварским" способом, т.е. вручную.
Oффтоп:
читал в топике $_POST ваше обсуждение автора одного курса php, имя которого решили даже не называть на этом форуме... посоветуйте пожалуйста хорошую книгу, которая бы могла дать начальное представление о конструкциях php, а то приходится "барахтаться" в коде, не всегда понимая, зачем нужны те или иные действия...
Спасибо1

  Ответить  
 
 автор: sim5   (20.02.2011 в 17:53)   письмо автору
 
   для: julpierto   (20.02.2011 в 17:46)
 

Вверху форума выставлены ссылки на книги, авторами которых явлются создатели этого форума. Выбирайте.

Так не пойдет, лучше тогда встроить в данные html-страницы небольшой php-код, который будет вставлять ссылки, а не считывать дюжинами файлы что-то меня в них. Тем более в вашем коде столько ляпов, что...

  Ответить  
 
 автор: julpierto   (20.02.2011 в 18:01)   письмо автору
 
   для: sim5   (20.02.2011 в 17:53)
 

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

  Ответить  
 
 автор: sim5   (20.02.2011 в 18:16)   письмо автору
 
   для: julpierto   (20.02.2011 в 18:01)
 

Если меняются, то значит создавать их надо с помощью РНР, то есть динамически, и тогда проблем вообще не будет. К тому же, вопрос, кто меняет, так что выход найти можно и в этом случае.

Что касается ошибок:
- фигурные скобки непарные, от этого и получаете ошибку.
- переменная $z неопределена, и она не то что считать не будет, интерпретатор просто будет вынужден выдать сообщение об ошибке.
- все ваши операции по замене коту под хвост, ибо вместо записи изменений вы непонятно что делаете.
- считывать ссылки в массив нужно вне цикла, гонять это в цикле нерационально.

Пишите код - делайте в нем отступы в конструкциях, читать его будет удобно.

  Ответить  
 
 автор: julpierto   (20.02.2011 в 18:45)   письмо автору
 
   для: sim5   (20.02.2011 в 18:16)
 

Считывание ссылок в цикле нужно для того, чтобы они перемешивались каждый раз.
sim5, постораюсь учесть ваши замечания, после проделанной над собой работы - надо больше читать.
Спасибо большое, удачи!

  Ответить  
 
 автор: sim5   (20.02.2011 в 20:46)   письмо автору
 
   для: julpierto   (20.02.2011 в 18:45)
 

Для этого достаточно перемешать единожды полученный массив, что вы и делаете - shuffle(). От того что вы будете считывать сам файл ссылок в массив при каждом проходе цикла, от этого перемешивание лучшим не станет.

  Ответить  
Rambler's Top100
вверх

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