Грабитель, ideone.com/qIriap Updated: начиная с PHP 5.3.6 у saveHTML() появился аргумент, в качестве которого можно указать один из узлов страницы, содержащейся в DOMDocument.
хочу вывести в переменную весь результат запроса: PHP: <?phpforeach (getallheaders() as $name => $value) {$zagolovki_zaprosa = "$name: $value\r\n<br>";}echo $zagolovki_zaprosa;?> но выводит только одну строку: Accept-Charset: UTF-8,*;q=0.5 как вывести все строки цикла в переменную ?
Code: <? foreach (getallheaders() as $name => $value) {$zagolovki_zaprosa = "$name: $value\r\n<br>"; echo $zagolovki_zaprosa; }?> в сам цикл и включить вывод или в самом цикле переменную использовать с точкой $zagolovki_zaprosa. = "$name: $value\r\n<br>"; Code: <? foreach (getallheaders() as $name => $value) {$zagolovki_zaprosa. = "$name: $value\r\n<br>"; } echo $zagolovki_zaprosa; ?>
winstrool, так не будет работать. Нужно не переменную с точкой, а присваивание с конкатенацией ( .= ) dondy, PHP: <?phpforeach (getallheaders() as $name => $value){ $zagolovki_zaprosa .= "$name: $value\r\n<br>";}echo $zagolovki_zaprosa;?>
Всем спасибо! а что же лучше использовать для вывода заголовков: getallheaders или apache_request_headers ? apache_request_headers выводит тоже самое что getallheader
Всем привет, сделал поиск по всем txt файлам, которые лежат в определённой папке, но он ищет не стабильно, иногда указываю конкретное слово, которое есть в тексте или словосочетание, и он не находит их совпадения, а некоторые запросы находит. (ищу в логах, где новая запись начинается с новой строки) что может быть не так в коде, помогите пожалуйста с доработкой? PHP: <html><head><title>Поиск совпадений в файлах txt</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head><form action="" class="required-form" method="post"><input type="text" style="background-color: lightyellow;border: solid 1px red;font-weight: bold;" placeholder="поиск по файлам" name="search_file" value="<?phpif(empty($_POST['search_file'])){}else{echo $_POST['search_file'];};?>"><input type="submit" style="font-weight: bold;cursor:pointer; cursor:hand;" value="Отправить" name="search"></form><?phpif($_POST['search']) {$searchthis = $_POST['search_file'];$searchthis2 = mb_convert_case($searchthis, MB_CASE_LOWER, 'UTF-8');$matches = array();$dir = './logs/';foreach(glob($dir . '*.txt') as $filename) { $handle = @fopen($filename, "r"); if ($handle) { while (!feof($handle)) { $buffer = fgets($handle); if(strpos($buffer, $searchthis2) !== FALSE) $matches[] = $filename . ': ' . $buffer; } fclose($handle); }}print_r($matches);}?></html>
Хотел тебе помочь, но понял, что у тебя расплывчатая задача, поэтому тебе никто не помогает. Укажи конкретно, что не находит, потому что при проверке на сервере он нормально находит нужный файл и выводит его в массиве.
не ищет например слово-фразу, которое явно встречается в файле, усложнил тест, загрузил txt электронную книгу: http://www.filedropper.com/lavkraftderletvedminlogwwwlitmirnet6910 фразу Войдя внутрь или слово Войдя - не находит а фразу старинной керосиновой лампой - находит
Есть скрипт. рабочий. Брутер md5 по словарю. Code: <?php @set_time_limit(0); @ignore_user_abort(1); $page='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>MD5 брутер</title> </head> <body> <form action="" method="POST"> <p><strong>MD5 hash:<br /> <br /> </strong> <input name="md5" type="text" value="5af666243008e2bf781e4245cfb0e915" maxlength="32" size="40" /><br /> <br /> <br /> <strong>Паролей в словаре: '.sizeof(file('password.txt')).'</strong> </p><p><br /> <input value="Готово!" type="submit" /> <input value="Очистить!" type="reset" /> </p> </form> </body></html>'; function md5_bruter(){ $password=file('password.txt'); for($c=0;$c<=sizeof($password)-1;$c++){ if($_POST['md5']==md5(trim($password[$c]))){ return $password[$c]; }else{ continue; } return false; } } if(isset($_POST['md5'])===false){ print $page; }else{ if(!md5_bruter()){ print '<html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>MD5 брутер</title> </head> <body> <strong>Соответствие не найдено :(</strong> </body></html>'; }else{ print '<html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>MD5 брутер</title> </head> <body> Зашифрованый пароль: <strong>'.md5_bruter().'</strong> </body></html>'; } } ?> На его основе я хочу сделать консольную версию. Для себя. В академических целях. И сделал вот так: Code: <?php $hash = "21232f297a57a5a743894a0e4a801fc3"; // Пароль, который нужно брутить admin по умолчанию set_time_limit(0); function md5_bruter() { $pass = fopen("/srv/www/htdocs/pass/pass.txt","r") or die("ошибка"); for($c=0;$c<=sizeof($pass)-1;$c++){ if($hash==md5(trim($pass[$c]))){ return $pass[$c]; }else{ continue; } return false; } } if(isset($hash)===false){ if(!md5_bruter()){ print "\nБрат...У нас проблема. Пароль не найден :( \n"; }else{ echo "Зашифрованый пароль: <strong>'.md5_bruter().'</strong>"; } } ?> Скрипт я разобрал полностью. Убрал html, выделил классы. Глобальные переменные "$_POST['md5']" заменил на "$hash". Но при выполнении у меня ничего не выводит. Совсем ничего. Ни ошибок, ни результата. Возможно, ошибся в указании переменной. Возможно в чем-то еще. Но в чем?
Видимо, потому, что поисковую строку ты приводишь к нижнему регистру ( $searchthis2 = mb_convert_case($searchthis, MB_CASE_LOWER, 'UTF-8'); ) А дальше в каждой строке текста ищешь строгое совпадение. Соответственно, удаляем строку: $searchthis2 = mb_convert_case($searchthis, MB_CASE_LOWER, 'UTF-8'); и if(strpos($buffer, $searchthis2) !== FALSE) $matches[] = $filename . ': ' . $buffer; заменяем на: if(mb_stripos($buffer, $searchthis, 0, 'UTF-8') !== FALSE) $matches[] = $filename . ': ' . $buffer;
Muracha Code: <?php $hash = "21232f297a57a5a743894a0e4a801fc3"; // Пароль, который нужно брутить admin по умолчанию set_time_limit(0); function md5_bruter($hash) { $pass = file("pass.txt") or die("ошибка"); for ($c = 0; $c <= sizeof($pass) - 1; $c++) { if ($hash == md5(trim($pass[$c]))) return $pass[$c]; } return "НЕ НАЙДЕН"; } if (isset($hash)) { echo "Зашифрованый пароль: <strong>".md5_bruter($hash)."</strong>"; }
Продолжая донимать брутер... С выперечисленным мне понятно. В класс нужно было указать $hash. Мелочь, а решить это для меня было трудно. Теперь встал вопрос. А что если видоизменить скрипт, когда он будет брать файл не из pass.txt, а из каталога файлов, где будут всякие значения но в текстовом формате: file.txt, zdesbilya.txt, e233ewdsd.txt? Логично, что нужно брать фунцию glob(). Спарсить каталог и просканировать его на txt файл, где взять каждую строку из файла и хешировать. Если в 1 файле не совпадает, берется другой и так до конца... Мне понятна логика, но я чисто технически путаюсь. Накидал следующее , нерабочее. Как заставить его обходить файлы? Code: <?php $hash = "21232f297a57a5a743894a0e4a801fc3"; // Пароль, который нужно брутить admin по умолчанию $dir = "/srv/htdocs/www/pass/"; set_time_limit(0); function md5_bruter($hash) { foreach (glob("*.txt") as $filename) { if (is_dir($dir)) { if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { $text = fread( $f , filesize( $f ) ); close($f); } closedir($dh); } } for ($c = 0; $c <= sizeof($pass) - 1; $c++) { if ($hash == md5(trim($pass[$c]))) return $pass[$c]; } return "НЕ НАЙДЕН"; } if (isset($hash)) { echo "Зашифрованый пароль: <strong>".md5_bruter($hash)."</strong>"; } } ?>
Если нужно только в папке $dir, то: PHP: <?phpset_time_limit(0);$hash = "21232f297a57a5a743894a0e4a801fc3";// Пароль, который нужно брутить admin по умолчанию$dir = "logs/";echo "Зашифрованый пароль: <strong>" . md5_bruter($hash, $dir) . "</strong>";function md5_bruter($hash, $dir) { foreach (glob($dir . "*.txt") as $current_file) { $pass = (filesize($current_file)>0)?file($current_file):array(); for ($c = 0; $c <= sizeof($pass) - 1; $c++) if ($hash == md5(trim($pass[$c]))) return $pass[$c]. " в файле $current_file"; } return "НЕ НАЙДЕН";} Если также и во всех подпапках нужно искать, то можно вместо glob использовать glob_recurcive: PHP: <?phpset_time_limit(0);$hash = "21232f297a57a5a743894a0e4a801fc3";// Пароль, который нужно брутить admin по умолчанию$dir = "logs/";echo "Зашифрованый пароль: <strong>" . md5_bruter($hash, $dir) . "</strong>";function md5_bruter($hash, $dir) { foreach (glob_recursive($dir . "*.txt") as $current_file) { $pass = (filesize($current_file)>0)?file($current_file):array(); for ($c = 0; $c <= sizeof($pass) - 1; $c++) if ($hash == md5(trim($pass[$c]))) return $pass[$c]. " в файле $current_file"; } return "НЕ НАЙДЕН";}function glob_recursive($pattern, $flags = 0) { $files = glob($pattern, $flags); foreach (glob(dirname($pattern) . '/*', GLOB_ONLYDIR | GLOB_NOSORT) as $dir) $files = array_merge($files, glob_recursive($dir . '/' . basename($pattern), $flags)); return $files;}
всем привет, переделывал один код для календаря на php, но сделать выделение текущего дня в таблице не смог, помогите пожалуйста выделить текущий день в ячейке календаря код календаря: PHP: <style>/* календарь */table.calendar { border-left:1px solid #999; }tr.calendar-row { }td.calendar-day { min-height:80px; font-size:11px; position:relative; } * html div.calendar-day { height:80px; }td.calendar-day:hover { background:#eceff5; }td.calendar-day-np { background:#eee; min-height:80px; } * html div.calendar-day-np { height:80px; }td.calendar-day-head { background:#ccc; font-weight:bold; text-align:center; width:120px; padding:5px; border-bottom:1px solid #999; border-top:1px solid #999; border-right:1px solid #999; }div.day-number { background:#999; padding:5px; color:#fff; font-weight:bold; float:right; margin:-5px -5px 0 0; width:20px; text-align:center; }td.calendar-day, td.calendar-day-np { width:120px; padding:5px; border-bottom:1px solid #999; border-right:1px solid #999; }</style><?php/* Функция генерации календаря */function draw_calendar($month,$year){ /* Начало таблицы */ $calendar = '<table cellpadding="0" cellspacing="0" class="calendar">'; /* Заглавия в таблице */ $headings = array('Понедельник','Вторник','Среда','Четверг','Пятница','Субота','Воскресенье'); $calendar.= '<tr class="calendar-row"><td class="calendar-day-head">'.implode('</td><td class="calendar-day-head">',$headings).'</td></tr>'; /* необходимые переменные дней и недель... */ $running_day = date('w',mktime(0,0,0,$month,1,$year)); $running_day = $running_day - 1; $days_in_month = date('t',mktime(0,0,0,$month,1,$year)); $days_in_this_week = 1; $day_counter = 0; $dates_array = array(); /* первая строка календаря */ $calendar.= '<tr class="calendar-row">'; /* вывод пустых ячеек в сетке календаря */ for($x = 0; $x < $running_day; $x++): $calendar.= '<td class="calendar-day-np"> </td>'; $days_in_this_week++; endfor; /* дошли до чисел, будем их писать в первую строку */ for($list_day = 1; $list_day <= $days_in_month; $list_day++): $calendar.= '<td class="calendar-day">'; /* Пишем номер в ячейку */ $calendar.= '<div class="day-number">'.$list_day.'</div>'; /** ЗДЕСЬ МОЖНО СДЕЛАТЬ MySQL ЗАПРОС К БАЗЕ ДАННЫХ! ЕСЛИ НАЙДЕНО СОВПАДЕНИЕ ДАТЫ СОБЫТИЯ С ТЕКУЩЕЙ - ВЫВОДИМ! **/ $calendar.= str_repeat('<p> </p>',2); $calendar.= '</td>'; if($running_day == 6): $calendar.= '</tr>'; if(($day_counter+1) != $days_in_month): $calendar.= '<tr class="calendar-row">'; endif; $running_day = -1; $days_in_this_week = 0; endif; $days_in_this_week++; $running_day++; $day_counter++; endfor; /* Выводим пустые ячейки в конце последней недели */ if($days_in_this_week < 8): for($x = 1; $x <= (8 - $days_in_this_week); $x++): $calendar.= '<td class="calendar-day-np"> </td>'; endfor; endif; /* Закрываем последнюю строку */ $calendar.= '</tr>'; /* Закрываем таблицу */ $calendar.= '</table>'; /* Все сделано, возвращаем результат */ return $calendar;}/* СПОСОБ ПРИМЕНЕНИЯ *///месяцы и недели на русскомfunction rdate($param, $time=0) {if(intval($time)==0)$time=time();$MN=array('Января', 'Февраля', 'Марта', 'Апреля', 'Мая', 'Июня', 'Июля', 'Августа', 'Сентября', 'Октября', 'Ноября', 'Декабря');$MonthNames[]=$MN[date('n',$time)-1];$MN=array('Воскресенье','Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', '');$MonthNames[]=$MN[date('w',$time)];$arr[]='M';$arr[]='N';if(strpos($param,'M')===false) return date($param, $time); else return date(str_replace($arr,$MonthNames,$param), $time);}//месяцы и недели на русском$mesjac = date('n');$god = date('Y');echo '<h2 style="text-align:center; font-family: Monotype Corsiva; font-size: 19px; color: #1E90FF; text-shadow: #828282 3px 2px 3px;"">Сегодня '.rdate('j M Y года. N. H:i').'</h2>';echo draw_calendar($mesjac,$god);?>
date('d') генерирует текущее число. А в календаре число пробегается по переменной $list_day, соответственно, когда они совпадают - меняем цвет ячейки. Если нужно "всю ячейку с цифрой выделить", то строчку: $calendar.= '<div class="day-number">'.$list_day.'</div>'; Замени на PHP: if ($list_day==date('d')) $calendar.= '<td class="calendar-day" style="background-color:#6B90D4">';else $calendar.= '<td class="calendar-day">'; А если только маленькую ячейку, то строчку: $calendar.= '<div class="day-number">'.$list_day.'</div>'; Замени на: PHP: if ($list_day==date('d')) $calendar.= '<div class="day-number" style="background-color:#6B90D4">' . $list_day . '</div>';else $calendar.= '<div class="day-number">' . $list_day . '</div>'; P.s. Плюс date('d') имеет смысл заранее куда-то в переменную занести и потом уже с этой переменной сравнивать, чтобы лишний раз функцию не вызывать.
На весь код можно не смотреть, самое главное это return и break Не могу понять почему не работает return во 2-ом скрипте. Возвращает всегда не правильный результат.подскажите плиз. как правильно вернуть результат из цикла? Так работает: PHP: function check_spider_bot($u_a){.... foreach ($spider_bots as $items) { $pos = strpos($u_a, $items); if ($pos) { $result = true; break; } else { $result = false; }; }return $result;} Так не работает PHP: function check_spider_bot($u_a){.... foreach ($spider_bots as $items) { $pos = strpos($u_a, $items); if ($pos) { return true; break; } else { return false; }; }} Просто не хочу использовать дополнительную переменную $result, можно ли как то напрямую из цикла вернуть результат ?
Убери из второго варианта блок else {...} - он у тебя всегда возвращает результат обработки первого элемента массива $spider_bots.
Можно ли использовать foreach внутри foreach? К примеру, с помощью одного foreach() из бд `vii_page` есть таблица, в которой насчитывается насчитываются 4 строки c информацией. Эта информация оформляется и выгружается в блок, оформление которого описывается в page.tpl Нужно, чтобы в каждом этом блоке, с помощью второго foreach() насчитывалось еще информация из таблицы `vii_photos', где есть, к примеру 10 строк, информация которая тоже оформляется в photo.tpl В конечном итоге, информация выведенная из второго foreach() выводилась в photo.tpl, которая потом, с информацией из первого foreach() оформлялась в конечный page.tpl. Можно ли это, используя foreach внутри foreach? Или это можно как-то по другому реализовать без нагрузки на mysql. Например: При открытие страницы было вынесено 4 блока из базы данных 'vii_blocks' с параметром WHERE type='photo'. В каждом вынесеном блоке была инормация из бд 'vii_photos'. В одном блоке 'vii_photos'. album_id = '1'; (4 результата) Во втором блоке 'vii_photos'.album_id = '3'; (2 результата) В третьем блоке 'vii_photos'.album_id = '4'; (3 результата) В четвертом блоке 'vii_photos'.album_id = '11';(5 результатов) Каждый результат оформлялся в шаблоный блок. В итоге на странице из бд выведено 4 блока. В первом блоке еще !4 блока! с выведеной информацией, во втором 2 , и т.д.