В учебнике оказался нерабочий скрипт. Пользуюсь версией PHP 5.3, программа же была написана под 4.4.0 версией (может в этом ошибка). Браузер ругается на ошибку в синтаксисе 22-ой строчки обработчика. Писал так как было напечатано в учебнике. index.html (форма): HTML: <form action="upload_action.php" method="POST" enctype="multipart/form-data"> <!--Ставим ограничение в 600 Кбайт--> <input type="hidden" name="MAX_FILE_SIZE" value="614400"> <input type="file" name="upload" > <input type="submit" name="upload_button" value="Закачать"> </form> upload_action.php (обработчик формы): PHP: <?php //Проверка на то, что обработка формы if (isset($_POST["upload_button"])) { //Проверка на то что нет ошибок if ($_FILES['upload']['error']==0) { //Получаем имя файла, который хочет закачать пользователь $upload_file = $_FILES['upload']['name']; //Задаем каталог, куда будут грузиться картинки для пункта $upload_dir = 'PICTURE/'; //Массив расширений графических файлов разрешенных для закачки $images_allow = array ("JPG", "GIF", "PNG", "jpg", "gif", "png"); //Получаем информацию о файле $file_info = pathinfo($upload_file); //Проверка на то, что расширение файла разрешено для загрузки if (!(in_array($file_info['extension'],$images_allow))) { echo "Расширение ". $file_info['extension']." Является недопустимым, "; echo "вы можете загружать только файлы JPG, GIF и PNG!<BR>"; echo <a href='index.html'>НАЗАД</a>; exit; } //Файл, который будем копировать, он закачан на сервер $tmp_path=$_FILES['upload']['tmp_name']; //Путь+имя файла, куда будем копировать $full_path_for_copy=$upload_dir.$upload_file; //Пытаемся переместить загруженный файл из временного хранилища if (move_uploaded_file($tmp_path,$full_path_for_copy)) { echo 'Все ОК'; echo "Картинка успешно загружена, вы можете видеть ее ниже.<BR>"; echo "<img src=".$full_path_for_copy.">"; exit; } else { echo 'Ошибка, не удалось скопировать файл из временного каталога.'; echo "<br><a href='index.html'>НАЗАД</a>"; exit; } } else { echo "Невозможно загрузить файл из-за возникновения ошибки с кодом "; echo $_FILES['upload']['error']; echo "<br><a href='index.html'>Назад</a>"; } } ?> [/php][/html]
А вообще этот скрипт с точки зрения безопасности фуфло: 1) Не выводит какая именно ошибка возникла при загрузке 2) не проверят на то что загружен ли файл на сервер вообще 3) необходимо перед тем как сохранять файл картинки переделать его размер хотя бы на 1px
Так как в мета описании файла может храниться php код и что бы его нейтрализовать надо изменить структуру файла.
Ви таки не поверите .. Но можно просто распарсить файл и проверить на предмет левого кода. Курите исходники IP.Board, они гарантируют это.
Помогите пожалуйста - прочитал статью - Сбор статистики на PHP - http://www.php.su/articles/?cat=...les&page=009 попробовал встроить скрипт в сайт - не работает: файл sniffer.php PHP: <?php //sniffer.php //защита от непосредственного запуска //скрипта кем то посторонним if (eregi("sniffer.php",$PHP_SELF)) { Header("Location: index.php"); die(); } extract($HTTP_GET_VARS); extract($HTTP_POST_VARS); extract($HTTP_COOKIE_VARS); extract($HTTP_SERVER_VARS); //этот фрагмент кода был позаимствован //из системы PHP Nuke ;) //далее объявляю переменные $fileName="stat.txt"; //имя файла со статистикой $maxVisitors=30; //количество записей, отображаемых //при просмотре статистики $cookieName="visitorOfMySite"; //имя куки $cookieValue="1"; //значение куки $timeLimit=86400; //срок в секундах, который должен //пройти с момента последнего посещения сайта, что бы //информация о посетителе записалась повторно. Это //значение равно 1 дню, т.е. один и тот же посетитель //записывается в статистику раз в одни сутки. Если //эту переменную приравнять к нулю, то будут учитываться //все посещения одного и того же посетителя //далее следуют переменные, отвечающие за отображение //статистики $headerColor="#808080"; $headerFontColor="#FFFFFF"; $fontFace="Arial, Times New Roman, Verdana"; $fontSize="1"; $tableColor="#000000"; $rowColor="#CECECE"; $fontColor="#0000A0"; $textFontColor="#000000"; //все переменные подготовлены. //Функция записи данных о посетителе function saveUserData() { GLOBAL $fileName, $HTTP_USER_AGENT, $REMOTE_ADDR, $REMOTE_HOST, $HTTP_REFERER, $REQUES_URI; $curTime=date("d.m.Y @ H:i:s"); //текущее время и дата //подготавливаю данные для записи if (empty($HTTP_USER_AGENT)) {$HTTP_USER_AGENT = "Unkwnown";} if (empty($REMOTE_ADDR)) {$REMOTE_ADDR = "Not Resolved";} if (empty($REMOTE_HOST)) {$REMOTE_HOST = "Unknown";} if (empty($HTTP_REFERER)) {$HTTP_REFERER = "No Referer";} if (empty($REQUEST_URI)) {$REQUEST_URI = "Unknown";} $data_ = $HTTP_USER_AGENT."::".$REMOTE_ADDR."::".$REMOTE_HOST.":: ".$HTTP_REFERER."::".$REQUEST_URI."::".$curTime."\r\n"; //разделителем будут два ":" //далее пишу в файл if (is_writeable($fileName) ) : $fp = fopen($fileName, "a"); fputs ($fp, $data_); fclose ($fp); endif; } //функция записи готова. Теперь нужно написать //функцию вывода данных из файла статистики function showStat () { GLOBAL $headerColor, $headerFontColor, $fontFace, $fontSize, $tableColor, $fileName, $maxVisitors, $rowColor, $fontColor, $textFontColor; //вывожу таблицу $fbase=file($fileName); $fbase = array_reverse($fbase); $count = sizeOf($fbase); echo "<font face=\"$fontFace\" color=\"$textFontColor\" size=\"$fontSize\">"; echo "Всего посещений: $count<br><br>"; echo "<div align=\"center\"> <table cellpadding=\"2\" cellspacing=\"1\" width=\"95%\" border=\"0\" bgcolor=\"$tableColor\">"; echo "<tr bgcolor=\"$headerColor\"><td>< font face=\"$fontFace\" color=\"$headerFontColor\" size=\"$fontSize\">Браузер </font> </td><td><font face=\"$fontFace\" color=\"$headerFontColor\" size=\"$fontSize\">IP</font></td> <td><font face=\"$fontFace\" color=\"$headerFontColor\" size=\"$fontSize\">Хост</font></td> <td><font face=\"$fontFace\" color=\"$headerFontColor\" size=\"$fontSize\">Ссылка</font></td> <td><font face=\"$fontFace\" color=\"$headerFontColor\" size=\"$fontSize\">Страница</font></td> <td><font face=\"$fontFace\" color=\"$headerFontColor\" size=\"$fontSize\">Время визита</font></td></tr>"; echo "</font><font face=\"$fontFace\" size=\"$fontSize\">"; //открываю файл и запускаю цикл $fbase=file($fileName); $fbase = array_reverse($fbase); for ($i=0; $i<$maxVisitors; $i++) : if ($i>= sizeof($fbase)) {break;} $s = $fbase[$i]; //разделяю $strr = explode("::", $s); if (empty($strr)) {break;} //вывожу данные echo "<tr><td bgcolor=\"$rowColor\">< font face=\"$fontFace\" color=\"$fontColor\" size=\"$fontSize\">$strr[0]</font> </td><td bgcolor=\"$rowColor\">< font face=\"$fontFace\" color=\"$fontColor\" size=\"$fontSize\">$strr[1]</font> </td><td bgcolor=\"$rowColor\">< font face=\"$fontFace\" color=\"$fontColor\" size=\"$fontSize\">$strr[2]</font> </td><td bgcolor=\"$rowColor\">< font face=\"$fontFace\" color=\"$fontColor\" size=\"$fontSize\">$strr[3]</font> </td><td bgcolor=\"$rowColor\">< font face=\"$fontFace\" color=\"$fontColor\" size=\"$fontSize\">$strr[4]</font> </td><td bgcolor=\"$rowColor\">< font face=\"$fontFace\" color=\"$fontColor\" size=\"$fontSize\">$strr[5]</font></td> </tr>"; endfor; } ?> файл шапки - PHP: <?php include("sniffer.php"); if (! isset($$cookieName)) : //установить куки setcookie($cookieName, $cookieValue, time()+$timeLimit); saveUserData(); endif; ?> Есть мнение что это из-за того что sniffer подключается до cookie, а в нём много echo. Пробовал вытаскивать из него переменные а подключать после cookie - всё равно не работает =( Помогите пожалуйста!
Хм насколько я понял из документации эта функция доступна с версии PHP 5.0.0. а это написано вроде для 4 версии вроде. могу ошибаться.