danil74
Newbie | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Всем привет. Мне понравилась эта ветка и я тоже решил поделиться свом творчеством. Иногда для ускорения разработки скриптов я использую вспомогательные скрипты. Думаю, не я один страдаю этим недостатком. Парочкой таких скриптов я и хочу поделиться. Помню я какое-то время долго и упорно искал в литературе и инете полное описание суперглобальных массивов($_REQUEST, $_SERVER и т.д.), но так ничего толкового не нашёл. И тут мне пришла в голову идея написать скрипт, который будет выволить значения ключей всех уровней и значений исследуемого массива. В результае получилось вот это(привожу на примере суперглобального массива $_SERVER) Код: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title>Изучам массивы</title> </head> <body> <?php function view($var1, $var2){//Создаю рекурсивную функцию для отображения всех ключей и всех значений массива foreach ($var1 as $name => $value) {if(gettype($value)=="array") view($var1[$name], "$var2 [$name]"); else echo "<b>\$$var2 [$name]</b> = $value<br>\n"; } }; /////////////////////////////////////////////////////////////////////////// $var_name="_SERVER";//Сюда нужно вписать имя переменной без знака $ вначале /////////////////////////////////////////////////////////////////////////// view($$var_name, $var_name);//А теперь запускаю вывод ключей и значений массива ?> </body> </html> | Попробуйте, например, написать Код: $a=array("a" => array("121", array("121", "243", "45"), "45"), "b" => "dg", "c" => "hfgh" ); $var_name="a"; | Для того, чтобы увидеть, что делают другие суперглобальные массивы $_COOKIE, $_ENV, $_FILES, $_GET, $_POST, $_REQUEST, $_SESSION нужно подготовиться. Нопример, чтобы появились $_COOKIE нужно в самом начале файла до любого хтмля написать что-нибудь вроде Код: setcookie("cookie_name", "cookie_value", time()+3600); | Чтобы появились $_FILES необходимо послать форму Код: <form method="POST" enctype="multipart/form-data" action="--WEBBOT-SELF--"> <p><input type="file" name="FILE1" size="20"><input type="submit" value="Отправить"></p> </form> | С помощью этого массива так удобно закачивать файлы на сервер. Например хотим закачивать картинки в папку images Код: <?php $dir=opendir("./images/"); chdir("./images/"); //Перешли к папке images if(isset($location)){//Загружаем картинку на сервер if($_FILES['location']['type']==="image/pjpeg"||$_FILES['location']['type']==="image/gif"||$_FILES['location']['type']==="image/x-png")copy( $_FILES['location']['tmp_name'], basename($_FILES['location']['name'])); else echo "Не обнаружены файлы с поддерживаемыми изображениями<br>"; }?> <form method="POST" enctype="multipart/form-data" action=""> <p><input type="file" name="location" size="20"><input type="submit" value="Отправить"></p> </form> | Остальные суперглобальные массивы я думаю вы теперь и сами изучете Скрипт для показа ключей и значений очень удобен для узнавания что вернула функция mysql_fetch_array и тому подобным целям. ******************************************************* Второй полезный вспомогательный скрипт я сделал для составления корректных регулярных выражений. Идею навеяла замечательная бесплатная прога "The Regex Coach". The Regex Coach всем хороша, но часто она регуляные выражения понимает не так, как интерпретатор php. Моя идея была сделать страничку, в которой два текстовых поля. Первое для регулярного выражения, второе для исследуемого текста, а в третью область с помощью AJAX будет подгружаться результат экзекуции из php-скрипта. Результат должен выглядеть так. Всё соответствие регулярному выражению будет выделяться красной рамкой, чтобы было видно где оно начинается и заканчивается. Если в регулярном выражении использованы скобки, то результат должен помещаться в чёрную рамку и к нему добавляться индекс скобок. Получилось следующее Это файл index.htm Код: <html> <head> <meta http-equiv="Content-Language" content="ru"> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title>Загрузка данных</title> <script language="javascript"> function createRequestObject() { var ro; var browser = navigator.appName; if(browser == 'Microsoft Internet Explorer'){ ro = new ActiveXObject('Microsoft.XMLHTTP'); }else{ ro = new XMLHttpRequest(); } return ro; } var http = createRequestObject(); function sndReq(action) { http.open('POST', 'regular.php', true); http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=WINDOWS-1251"); http.onreadystatechange = handleResponse; http.send('regul='+action.regul.value+'&expression='+action.expression.value);//null } function handleResponse() { if(http.readyState == 4){ var response = http.responseText; document.getElementById("view_text").innerHTML = response; } } </script> </head> <body> <form> <table border="0" width="100%" cellspacing="1" cellpadding="3"> <tr> <td bgcolor="#C0C0C0" width="10%" valign="top">Регулярное выражение</td> <td> <textarea rows="10" name="regul" cols="100" style="width: 100%" onKeyUp="sndReq(this.form)"></textarea></td> </tr> <tr> <td bgcolor="#C0C0C0" width="10%" valign="top">Преобразуемый текст</td> <td> <textarea rows="10" name="expression" cols="100" style="width: 100%" onKeyUp="sndReq(this.form)"></textarea></td> </tr> <tr> <td bgcolor="#C0C0C0" width="10%" valign="top">Результат</td> <td bgcolor="#CCFFFF" valign="top" height="300"><div id="view_text"></div></td> </tr> </table> <input type="button" value="Применить" onClick="sndReq(this.form)"> </form> </body> </html> | Это файл regular.php Код: <?php header("Content-Type: text/html; charset=windows-1251");//Это нужно для корректного отображения русской кодеровки. //Создаю массив всех кусков удовлетворяющего текста. @preg_match_all("/$regul/", $expression, $regs, PREG_PATTERN_ORDER) or die('<font color="red" size="5">Ошибка в синтаксисе регулярного выражения либо нет совпадений</font>'); $expression = htmlspecialchars($expression, ENT_QUOTES);//Избавляюсь от всех символов, мешающих выводу HTML $regs[0] = array_unique($regs[0]);//Оставляю только уникальные значения, чтобы str_replace() не наслаивала вывод foreach ($regs[0] as $name => $value){//Запускаю цикл для преобразования строки $regs[0][$name] = htmlspecialchars($regs[0][$name], ENT_QUOTES);//Привожу к виду как $expression $regs1[0][$name] = $regs[0][$name];//Создаю новый массив на случай, если в регулярном выражении нет скобок /*Если в регулярном выражении есть скобки, то этот цикл возьмёт соответствующее им содержимое в чёрную рамку с зеленоватым фоном и индексом в верхнем регистре*/ for($i=1; isset($regs[$i]); $i++){ $regs[$i][$name] = htmlspecialchars($regs[$i][$name], ENT_QUOTES); $regs1[0][$name] = str_replace($regs[$i][$name], '<span style="background-color: #99FF99; border: 1px solid black;">'.$regs[$i][$name].'<sup>'.$i.'</sup></span>', $regs1[0][$name]); } //Всё, что полностью соответствует регулярному выражению забираю в красную рамку $expression = str_replace($regs[0][$name], '<span style="border: solid 1px red;">'.$regs1[0][$name].'</span>', $expression); } //Рускодируем символы, которые почему-то приходят в UTF-8(необходим модуль iconv для php) $expression = iconv('UTF-8', 'windows-1251', $expression); echo $expression;//Отдаём получившуюся строку браузеру ?> | Оба файла нужно поместить в одну папку на сервере с поддержкой php4 и пользоваться. Несмотря на то, что эта конструкция не лишена некоторых глюков, но для отладки вполне пригодна. Например, если встаёт задача вытащить данные из XML(Яndex.xml, курсы валют, информер погоды и т.д.) это может сильно пригодиться. P.S. Модератор здесь смешной. Во всей России принято посылать на три буквы а от к окулисту. Заботиться о нашем здоровье |