BOB222
17.11.2012 - 21:55
программа
phpDesigner нашла ошибку в строке 32
а на сайте codepad показало ошибку
Parse error: syntax error, unexpected T_VARIABLE on line 32
$strLink = "<a href="%22%20.%20$arrKuda[$i]%20.%20%22" target="_blank" class="mylinks">" . $arrTextWords[$i] . "</a>";
как решить это?
inpost
17.11.2012 - 21:58
$var = ... ты инициализируешь переменную.
Далее пишешь ОТКРЫТЬ КАВЫЧКИ и записать всё в переменную... а потом в центре ЗАКРЫВАЕШЬ КАВЫЧКУ... Как системе понимать цифры после закрытой кавычки?
Используй одинарные кавычки. А если они дублируются - экранизируй кавычки.
_____________
Обучаю веб-программированию качественно и не дорого:
http://school-php.comФрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
inpost
17.11.2012 - 22:02
$var = '<div style="display:none;">';
$var = "<div style=\"display:none;\">";
_____________
Обучаю веб-программированию качественно и не дорого:
http://school-php.comФрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
BOB222
17.11.2012 - 22:29
хорошо. попробую переделать строку.
BOB222
17.11.2012 - 22:39
спасибо. ошибка исчезла.
на другой строке ошибка
foreach($arrLinkStrings as $strString) {
Warning: Invalid argument supplied for foreach() on line 15
Предупреждение: неверный аргумент поставляются для Еогеасп () в строке 15
inpost
17.11.2012 - 22:58
значит там не массив
_____________
Обучаю веб-программированию качественно и не дорого:
http://school-php.comФрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
У этого скрипта другая беда, даже если Вы правильно определите подключение к текстовым базам, он все равно не будет видеть ссылки дальше второго уровня, т.е. ссылка типа
http://вашсайт.ru/1.html будет работать, но если глубина вложения 3 или 4 то скрипт отказывается работать.
похоже ошибка гдето здесь.
// ищем в массиве урл страницы, на которой мы находимся---------------
$strLinks = "";
[QUOTE=BOB222,17.11.2012 - 21:55]программа
phpDesigner нашла ошибку в строке
$strLink = "<a href="%22%20.%20$arrKuda[$i]%20.%20%22" target="_blank" class="mylinks">" . $arrTextWords[$i] . "</a>";
$strLink = "<a href=" . $arrKuda[$i].">" . $arrTextWords[$i]."</a>";
или
$strLink = "<a href='" . $arrKuda[$i] . "' target=_blank>" . $arrTextWords[$i]."</a>";
в зависимости от того открывать ссылку в том же окне или новом.
У меня работающий скрипт выглядит вот так:
<?
//$TheUrl = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; // вызванная страница
$TheUrl = "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
// считываем в массив файл со списком ссылок------------------------------------------------
// out.txt
// формат "урл откуда ссылка=урл куда ссылка=текст ссылки=текст блока вокруг ссылки
$arrLinkStrings = file ("reg/linkator/out.txt");
$arrOtkuda = array();
$arrKuda = array();
$arrTextWords = array();
$arrTextBlock = array();
foreach($arrLinkStrings as $strString) {
// list($arrOtkuda[],$arrKuda[],$arrTextWords[],$arrTextBlock[]) = split("~",$strString);
list($arrOtkuda[],$arrKuda[],$TextBlock) = split("~",$strString);
$arrTextBlock[]=str_replace("%", "", $TextBlock);
list($do,$arrTextWords[],$posle) = split("%",$TextBlock);
}
// считываем шаблон вывода блока ссылок
// tmpl_links_block.txt
$tmplLinksBlock = file_get_contents("reg/linkator/tmpl_links_block.txt");
// считываем шаблон вывода одной ссылки
// tmpl_link.txt
$tmplLink = file_get_contents("reg/linkator/tmpl_link.txt");
// ищем в массиве урл страницы, на которой мы находимся--------------------------------------------
$strLinks = '';
for($i = 0; $i <= (count($arrOtkuda)-1); $i++) {
$arrOtkuda[$i]=trim($arrOtkuda[$i]);
$arrKuda[$i]=trim($arrKuda[$i]);
$arrTextWords[$i]=trim($arrTextWords[$i]);
$arrTextBlock[$i]=trim($arrTextBlock[$i]);
if ($TheUrl==$arrOtkuda[$i] OR $TheUrl==$arrOtkuda[$i]."index1.html" OR $TheUrl."index1.html"==$arrOtkuda[$i]) { //главная страница
// $strLink = "<a href=" . $arrKuda[$i].">" . $arrTextWords[$i]."</a>";
$strLink = "<a href='" . $arrKuda[$i] . "' target=_blank>" . $arrTextWords[$i]."</a>";
if( strlen( $arrTextBlock[$i]) > 1) {
// если текстовый блок не пустой
$strLink = str_replace($arrTextWords[$i], $strLink, $arrTextBlock[$i]);
}
$strLink = str_replace("-item-", $strLink, $tmplLink);
$strLinks = $strLinks . $strLink;
}
}
// отдаем список ссылок
$strLinks = str_replace("-items-", $strLinks, $tmplLinksBlock);
echo($strLinks);
?>
Но все равно ссылки на файлы 3 и 4 уровней не проставляет
Ну вот кажется справился со скриптом.
<?php
$TheUrl = "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; // вызванная страница
// считываем в массив файл со списком ссылок------------------------------------------------
// out.txt
// формат "урл откуда ссылка=урл куда ссылка=текст ссылки=текст блока вокруг ссылки
$arrLinkStrings = file ("/www/designba/www/htdocs/linkator/out.txt");
$arrOtkuda = array();
$arrKuda = array();
$arrTextWords = array();
$arrTextBlock = array();
foreach($arrLinkStrings as $strString) {
// list($arrOtkuda[],$arrKuda[],$arrTextWords[],$arrTextBlock[]) = split("~",$strString);
list($arrOtkuda[],$arrKuda[],$TextBlock) = split("~",$strString);
$arrTextBlock[]=str_replace("%", "", $TextBlock);
list($do,$arrTextWords[],$posle) = split("%",$TextBlock);
}
// считываем шаблон вывода блока ссылок
// tmpl_links_block.txt
$tmplLinksBlock = file_get_contents("/www/designba/www/htdocs/linkator/tmpl_links_block.txt");
// считываем шаблон вывода одной ссылки
// tmpl_link.txt
$tmplLink = file_get_contents("/www/designba/www/htdocs/linkator/tmpl_link.txt");
// ищем в массиве урл страницы, на которой мы находимся--------------------------------------------
$strLinks = '';
for($i = 0; $i <= (count($arrOtkuda)-1); $i++) {
$arrOtkuda[$i]=trim($arrOtkuda[$i]);
$arrKuda[$i]=trim($arrKuda[$i]);
$arrTextWords[$i]=trim($arrTextWords[$i]);
$arrTextBlock[$i]=trim($arrTextBlock[$i]);
if ($TheUrl==$arrOtkuda[$i] OR $TheUrl==$arrOtkuda[$i]."index1.html" OR $TheUrl."index1.html"==$arrOtkuda[$i]) { //главная страница
$strLink = "<a href='".$arrKuda[$i]."'>".$arrTextWords[$i]."</a>";
if( strlen( $arrTextBlock[$i]) > 1) {
// если текстовый блок не пустой
$strLink = str_replace($arrTextWords[$i], $strLink, $arrTextBlock[$i]);
}
$strLink = str_replace("-item-", $strLink, $tmplLink);
$strLinks = $strLinks . $strLink;
}
}
// отдаем список ссылок
$strLinks = str_replace("-items-", $strLinks, $tmplLinksBlock);
echo($strLinks);
?>
Строка вывода ссылок выглядит так:
<?php include ("/www/designba/www/htdocs/linkator/generator_block_links.php")?>
Теперь работает со всеми страницами сайта.
BOB222
20.01.2013 - 14:52
Спасибо за труды. попробую установить.
borland
20.01.2013 - 17:26
Как вариант, попробуйте через $_SERVER['DOCUMENT_ROOT'] проверить все пути.
Цитата (BOB222 @ 20.01.2013 - 14:52) |
Спасибо за труды. попробую установить. |
Есть еще одна неувязочка в скрипте.
Файл generator_out_file.php который создает базу ссылок объединяя данные из файла page.txt и links.txt почему то прекращает создание блоков ссылок в файле out.txt на том количестве ссылок которое находится в файле links.txt, таким образом мне пришлось мне пришлось четыре раза продублировать ссылки в этом файле.
В инструкции к скрипту сказано что файл generator_out_file.php необходимо запустить только один раз для генерации ссылок, на самом деле его надо запускать раз десять подряд (в зависимости от количества ссылок, у меня их 180), чтобы он просмотрел всю базу и убрал повторы.
Файл generator_out_file.php, генерирует базу ссылок out.txt,
<?
error_reporting (E_ALL); //error_reporting(0);
$inpage=1;
//обьявляем файлы
$page_file=file('page.txt'); //страницы
$links_file=file('links.txt'); //ссылки
$fd=fopen('out.txt',"a"); //выход
$outfile = join($fd, file('out.txt'));
$page_count_start=count($page_file);
$links_count_start=count($links_file);
$page_count=$page_count_start;
$j=0;
$b = array();
while($key!=1) {
$i = array_rand ($links_file);
preg_match('!<a href="(.*?)">(.*?)</a>!si',$links_file[$i],$tmp[$i]);
$url=$tmp[$i][1];
$keywords=$tmp[$i][2];
if ($page_count>0){
echo' страницы есть <br>';
$page_number=$page_file[$j];
//$j++;
$page_count=$page_count-1;
}else{
echo' закончились страницы, обходим их заново <br>';
$j=0;
$page_count=$page_count_start;
$page_number=$page_file[$j];
//$j++;
$page_count=$page_count-1;
}
$page_out=trim($page_number).'~'.trim($url).'~%'.trim($keywords).'%';
$url_out=$url.'~%'.$keywords.'%';
$url_lost='~%%';
if(!stristr($url_out,$url_lost)){
if (stristr($outfile,$url_out)){echo' у нас повтор ссылки на страницах ';
echo'.. удаляем ссылку.. ';unset($links_file[$i]);
if($links_file<=$b){echo' упс все, ссылки закончились ';$key='1';}
else{echo' еще есть ссылки.. ';$i = array_rand ($links_file);}}else{
$page_out=trim($page_number).'~'.trim($url).'~%'.trim($keywords).'%';
fwrite($fd, $page_out."\r\n");
unset($links_file[$i]);
if($links_file>=$b){
$i = array_rand ($links_file);
$j++;
}}}else{$key='1';}}
fclose($fd);
?>
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.