Ошибка вывода содержимого(php)

Snoopik
На сайте с 20.02.2009
Offline
29
926

Привет всем.

Прошу помощи, не знаю, что и делать.

Проблема заключается в том, что когда я выдираю код странички, то он выдирает его несколько раз.


$url = $_GET['url'];
if (!empty($url))
{
$sock = fopen ($_GET['url'], 'r');
if (!$sock)
{
echo "Не получилось подключиться к ".$_GET['url']." .";
fclose ($sock);
}
else
{
$html = '';
while (!feof($sock)){
$html .= fgets($sock);

}
}

Если потом вывести $html , то будет клонировать код и всё выводиться на одной странице.Помогите решить проблему.

Чуть-чуть покопавшись увидел, вот, что.

Если я убираю код:


$pattern = '/<(.*?)href=\"(?!http)(.*?)\"(.*?)>/ims';
$replacement = '<$1href="'.$url.'$2"$3>';
$str = $html;
$html .= preg_replace($pattern, $replacement, $str);

и


if ($encode == "windows-1251")
{
$html .= str_replace("utf-8", "windows-1251", $html);
$html .= str_replace("UTF-8", "windows-1251", $html);
}
if ($encode == "utf-8")
{
$html .= str_replace("windows-1251", "utf-8", $html);
}

То всё становиться нормально.HELP ME =)

public class SearchEngines
DI
На сайте с 03.01.2007
Offline
123
#1
Snoopik:
Чуть-чуть покопавшись увидел, вот, что.

Каким уровнем телепатических навыков мы должны обладать, чтобы, покопавшись в первом блоке кода, увидеть то же, что и вы?

Насколько мне хватает телепатии, проблема в точке:

$html .=

Да и вообще код какой-то странный, выкиньте его и поищите другой.

Высказывание идиотского утверждения требует на порядок меньше усилий, чем его последовательное и обоснованное опровержение и более того, иногда это опровержение вообще невозможно. © (http://zhurnal.lib.ru/s/shapiro_m_a/raspidiota.shtml)
Snoopik
На сайте с 20.02.2009
Offline
29
#2
DenIT:
Каким уровнем телепатических навыков мы должны обладать, чтобы, покопавшись в первом блоке кода, увидеть то же, что и вы?

Насколько мне хватает телепатии, проблема в точке:

Да и вообще код какой-то странный, выкиньте его и поищите другой.

Получается телепатия на нулен, т.к. если убрать их мне выведет только конец кода а именно "</html>" и всё=(

Вот весь код


case "html" :

$url = $_GET['url'];
if (!empty($url))
{
$sock = fopen ($_GET['url'], 'r');
if (!$sock)
{
echo "Не получилось подключиться к ".$_GET['url']." .";
fclose ($sock);
}
else
{
$html = '';
while (!feof($sock)){
$html .= fgets($sock);

}
}

$pattern = '/<(.*?)href=\"(?!http)(.*?)\"(.*?)>/ims';
$replacement = '<$1href="'.$url.'$2"$3>';
$str = $html;
$html .= preg_replace($pattern, $replacement, $str);

// Узнаём IP адресс
$urla = $_GET['url'];
// Преобразовываем ип в хещ
$file = md5($urla);
// Задаём имя
$filename = $file.".html";
$unlik = $filename;
// Открываем на запись и чтение
$fd = fopen($filename, "w+");
// Открываем на запись и чтение
$ride = fopen($filename, "r+");
// Записываем
if ($encode == "windows-1251")
{
$html .= str_replace("utf-8", "windows-1251", $html);
$html .= str_replace("UTF-8", "windows-1251", $html);
}
if ($encode == "utf-8")
{
$html .= str_replace("windows-1251", "utf-8", $html);
}

fwrite($ride, $html);
// Закрываем
fclose($ride);
// Создаём объект
$createZip = new createZip;
// Контент файла
$fileContents = $html;
// Добавляем файл в архив
$createZip -> addFile($html, $filename);
// Создаём название сайта
$filezipname = $file.".zip";
// $fileName = $filezipname
$fileName = $filezipname;
// Открываем файл
$fdd = fopen ($fileName, "wb");
// Записываем
$out = fwrite ($fdd, $createZip -> getZippedfile());
// Закрываем
fclose ($fdd);

// Сообщение об успешном граббере кода
echo "<center>Вы успешно сграбили HTML-код страницы ". $_GET['url'] . "</center><br>";
echo '<center><a href="/graber/'.$fileName.'">Скачать</a></center>';
}
else
{
echo "Ошибка";
}
break;
DI
На сайте с 03.01.2007
Offline
123
#3
Snoopik:
если убрать их мне выведет только конец кода

А я и не говорил, что их нужно все убрать.

$html .= str_replace("utf-8", "windows-1251", $html);
$html .= str_replace("UTF-8", "windows-1251", $html);

Этими двумя строчками вы ПРИСОЕДИНЯЕТЕ к уже существующему тексту его же, только после строковой замены. Причем 2 раза. Поэтому в переменной хранится тройное содержимое.

Я не просто так посоветовал поменять код - мало того, что вы не понимаете, о чем он, так и его качество удручает. Для таких вещей есть str_ireplace, или приведение данных к единому регистру на крайний случай. А работа таких скриптов может быть весьма забавной, я не возьмусь судить о ней без ручной отладки:)

bezludny
На сайте с 04.03.2009
Offline
42
#4

Зря тем наплодил. Задача одна и та же выполняется.

И что это такое??


if ($encode == "windows-1251")
{
$html .= str_replace("utf-8", "windows-1251", $html);
$html .= str_replace("UTF-8", "windows-1251", $html);
}
if ($encode == "utf-8")
{
$html .= str_replace("windows-1251", "utf-8", $html);
}

Ты решил, что сможешь простой заменой "windows-1251" на "utf-8" или наоборот сменить КОДИРОВКУ ФАЙЛА? Для этого юзается iconv()

Snoopik
На сайте с 20.02.2009
Offline
29
#5
DenIT:
А я и не говорил, что их нужно все убрать.
$html .= str_replace("utf-8", "windows-1251", $html);

$html .= str_replace("UTF-8", "windows-1251", $html);

Этими двумя строчками вы ПРИСОЕДИНЯЕТЕ к уже существующему тексту его же, только после строковой замены. Причем 2 раза. Поэтому в переменной хранится тройное содержимое.

Я не просто так посоветовал поменять код - мало того, что вы не понимаете, о чем он, так и его качество удручает. Для таких вещей есть str_ireplace, или приведение данных к единому регистру на крайний случай. А работа таких скриптов может быть весьма забавной, я не возьмусь судить о ней без ручной отладки:)

Да,спасибо.

Ещё тут нужно точку убрать.


$pattern = '/<(.*?)href=\"(?!http)(.*?)\"(.*?)>/ims';
$replacement = '<$1href="'.$url.'$2"$3>';
$str = $html;
$html .= preg_replace($pattern, $replacement, $str);

=)

Snoopik добавил 28.03.2009 в 12:13

bezludny:
Зря тем наплодил. Задача одна и та же выполняется.
И что это такое??


if ($encode == "windows-1251")
{
$html .= str_replace("utf-8", "windows-1251", $html);
$html .= str_replace("UTF-8", "windows-1251", $html);
}
if ($encode == "utf-8")
{
$html .= str_replace("windows-1251", "utf-8", $html);
}


Ты решил, что сможешь простой заменой "windows-1251" на "utf-8" или наоборот сменить КОДИРОВКУ ФАЙЛА? Для этого юзается iconv()

iconv()

Не все хостеры поддерживают.

bezludny
На сайте с 04.03.2009
Offline
42
#6

Тем не менее, твоя конструкция не является решением.

Snoopik
На сайте с 20.02.2009
Offline
29
#7
bezludny:
Тем не менее, твоя конструкция не является решением.

Ну тогда так?


if ($encode == "windows-1251")
{
$html = iconv("UTF-8", "windows-1251", $html)
}
if ($encode == "utf-8")
{
$html = iconv("windows-1251", "UTF-8", $html)
}

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий