За последние 24 часа нас посетили 112069 программистов и 3020 роботов. Сейчас ищут 1334 программиста ...

Помогите, не работает скрипт

Тема в разделе "PHP для новичков", создана пользователем suffism575, 19 фев 2011.

  1. suffism575

    suffism575 Активный пользователь

    С нами с:
    12 фев 2011
    Сообщения:
    3
    Симпатии:
    0
    В учебнике оказался нерабочий скрипт. Пользуюсь версией PHP 5.3, программа же была написана под 4.4.0 версией (может в этом ошибка). Браузер ругается на ошибку в синтаксисе 22-ой строчки обработчика. Писал так как было напечатано в учебнике.

    index.html (форма):
    HTML:
    1. <form action="upload_action.php" method="POST" enctype="multipart/form-data">
    2. <!--Ставим ограничение в 600 Кбайт-->
    3. <input type="hidden" name="MAX_FILE_SIZE" value="614400">
    4. <input type="file" name="upload" >
    5. <input type="submit" name="upload_button" value="Закачать">
    6. </form>
    upload_action.php (обработчик формы):
    PHP:
    1. <?php
    2. //Проверка на то, что обработка формы
    3. if (isset($_POST["upload_button"]))
    4. {
    5.     //Проверка на то что нет ошибок
    6.     if ($_FILES['upload']['error']==0)
    7.     {
    8.         //Получаем имя файла, который хочет закачать пользователь
    9.         $upload_file = $_FILES['upload']['name'];
    10.         //Задаем каталог, куда будут грузиться картинки для пункта
    11.         $upload_dir = 'PICTURE/';
    12.        
    13.         //Массив расширений графических файлов разрешенных для закачки
    14.         $images_allow = array ("JPG", "GIF", "PNG", "jpg", "gif", "png");
    15.         //Получаем информацию о файле
    16.         $file_info = pathinfo($upload_file);
    17.         //Проверка на то, что расширение файла разрешено для загрузки  
    18.         if (!(in_array($file_info['extension'],$images_allow)))
    19.         {
    20.             echo "Расширение ". $file_info['extension']." Является недопустимым, ";
    21.             echo "вы можете загружать только файлы JPG, GIF и PNG!<BR>";
    22.             echo <a href='index.html'>НАЗАД</a>;
    23.             exit;
    24.         }
    25.    
    26.     //Файл, который будем копировать, он закачан на сервер
    27.     $tmp_path=$_FILES['upload']['tmp_name'];
    28.     //Путь+имя файла, куда будем копировать
    29.     $full_path_for_copy=$upload_dir.$upload_file;
    30.    
    31.     //Пытаемся переместить загруженный файл из временного хранилища
    32.     if (move_uploaded_file($tmp_path,$full_path_for_copy))
    33.     {
    34.         echo 'Все ОК';
    35.         echo "Картинка успешно загружена, вы можете видеть ее ниже.<BR>";
    36.         echo "<img src=".$full_path_for_copy.">";
    37.         exit;
    38.     }
    39.     else
    40.     {
    41.         echo 'Ошибка, не удалось скопировать файл из временного каталога.';
    42.         echo "<br><a href='index.html'>НАЗАД</a>";
    43.         exit;
    44.     }
    45.     }
    46.     else
    47.     {
    48.         echo "Невозможно загрузить файл из-за возникновения ошибки с кодом ";
    49.         echo $_FILES['upload']['error'];
    50.         echo "<br><a href='index.html'>Назад</a>";
    51.     }
    52. }
    53. ?>
    [/php][/html]
     
  2. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    suffism575
    по аналогии с двумя строчками выше после echo и перед точкой запятой нужны кавычки
     
  3. savenko

    savenko Активный пользователь

    С нами с:
    19 янв 2011
    Сообщения:
    15
    Симпатии:
    0
    А вообще этот скрипт с точки зрения безопасности фуфло:
    1) Не выводит какая именно ошибка возникла при загрузке
    2) не проверят на то что загружен ли файл на сервер вообще
    3) необходимо перед тем как сохранять файл картинки переделать его размер хотя бы на 1px
     
  4. admyx

    admyx Активный пользователь

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    Если не секрет, с чего сей гениальный вывод сделан?

    suffism575
    22 строчка:
    НЕ
    А
     
  5. Invision

    Invision Активный пользователь

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    или
    echo "<a href=\"index.html\">НАЗАД</a>";
     
  6. savenko

    savenko Активный пользователь

    С нами с:
    19 янв 2011
    Сообщения:
    15
    Симпатии:
    0
    Так как в мета описании файла может храниться php код и что бы его нейтрализовать надо изменить структуру файла.
     
  7. admyx

    admyx Активный пользователь

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    Ви таки не поверите ..
    Но можно просто распарсить файл и проверить на предмет левого кода.
    Курите исходники IP.Board, они гарантируют это.
     
  8. Nelepostb

    Nelepostb Активный пользователь

    С нами с:
    20 фев 2011
    Сообщения:
    15
    Симпатии:
    0
    Адрес:
    НН
    Помогите пожалуйста - прочитал статью - Сбор статистики на PHP - http://www.php.su/articles/?cat=...les&page=009 попробовал встроить скрипт в сайт - не работает:
    файл sniffer.php
    PHP:
    1.  <?php
    2.  
    3. //sniffer.php
    4.  
    5. //защита от непосредственного запуска
    6.  
    7. //скрипта кем то посторонним
    8.  
    9. if (eregi("sniffer.php",$PHP_SELF)) {
    10.  
    11. Header("Location: index.php");
    12.  
    13. die();
    14.  
    15. }
    16.  
    17. extract($HTTP_GET_VARS);
    18.  
    19. extract($HTTP_POST_VARS);
    20.  
    21. extract($HTTP_COOKIE_VARS);
    22.  
    23. extract($HTTP_SERVER_VARS);
    24.  
    25. //этот фрагмент кода был позаимствован
    26.  
    27. //из системы PHP Nuke ;)
    28.  
    29. //далее объявляю переменные
    30.  
    31. $fileName="stat.txt"; //имя файла со статистикой
    32.  
    33. $maxVisitors=30; //количество записей, отображаемых
    34.  
    35. //при просмотре статистики
    36.  
    37. $cookieName="visitorOfMySite"; //имя куки
    38.  
    39. $cookieValue="1"; //значение куки
    40.  
    41. $timeLimit=86400; //срок в секундах, который должен
    42.  
    43. //пройти с момента последнего посещения сайта, что бы
    44.  
    45. //информация о посетителе записалась повторно. Это
    46.  
    47. //значение равно 1 дню, т.е. один и тот же посетитель
    48.  
    49. //записывается в статистику раз в одни сутки. Если
    50.  
    51. //эту переменную приравнять к нулю, то будут учитываться
    52.  
    53. //все посещения одного и того же посетителя
    54.  
    55. //далее следуют переменные, отвечающие за отображение
    56.  
    57. //статистики
    58.  
    59. $headerColor="#808080";
    60.  
    61. $headerFontColor="#FFFFFF";
    62.  
    63. $fontFace="Arial, Times New Roman, Verdana";
    64.  
    65. $fontSize="1";
    66.  
    67. $tableColor="#000000";
    68.  
    69. $rowColor="#CECECE";
    70.  
    71. $fontColor="#0000A0";
    72.  
    73. $textFontColor="#000000";
    74.  
    75. //все переменные подготовлены.
    76.  
    77. //Функция записи данных о посетителе
    78.  
    79. function saveUserData() {
    80.  
    81. GLOBAL $fileName, $HTTP_USER_AGENT, $REMOTE_ADDR, $REMOTE_HOST,
    82.  
    83. $HTTP_REFERER, $REQUES_URI;
    84.  
    85. $curTime=date("d.m.Y @ H:i:s"); //текущее время и дата
    86.  
    87. //подготавливаю данные для записи
    88.  
    89. if (empty($HTTP_USER_AGENT)) {$HTTP_USER_AGENT = "Unkwnown";}
    90.  
    91. if (empty($REMOTE_ADDR)) {$REMOTE_ADDR = "Not Resolved";}
    92.  
    93. if (empty($REMOTE_HOST)) {$REMOTE_HOST = "Unknown";}
    94.  
    95. if (empty($HTTP_REFERER)) {$HTTP_REFERER = "No Referer";}
    96.  
    97. if (empty($REQUEST_URI)) {$REQUEST_URI = "Unknown";}
    98.  
    99. $data_ = $HTTP_USER_AGENT."::".$REMOTE_ADDR."::".$REMOTE_HOST."::
    100.  
    101. ".$HTTP_REFERER."::".$REQUEST_URI."::".$curTime."\r\n";
    102.  
    103. //разделителем будут два ":"
    104.  
    105. //далее пишу в файл
    106.  
    107. if (is_writeable($fileName) ) :
    108.  
    109. $fp = fopen($fileName, "a");
    110.  
    111. fputs ($fp, $data_);
    112.  
    113. fclose ($fp);
    114.  
    115. endif;
    116.  
    117. }
    118.  
    119. //функция записи готова. Теперь нужно написать
    120.  
    121. //функцию вывода данных из файла статистики
    122.  
    123. function showStat () {
    124.  
    125. GLOBAL $headerColor, $headerFontColor, $fontFace, $fontSize, $tableColor,
    126.  
    127. $fileName, $maxVisitors, $rowColor, $fontColor, $textFontColor;
    128.  
    129. //вывожу таблицу
    130.  
    131. $fbase=file($fileName);
    132.  
    133. $fbase = array_reverse($fbase);
    134.  
    135. $count = sizeOf($fbase);
    136.  
    137. echo "<font face=\"$fontFace\" color=\"$textFontColor\" size=\"$fontSize\">";
    138.  
    139. echo "Всего посещений: $count<br><br>";
    140.  
    141. echo "<div align=\"center\">
    142.  
    143. <table cellpadding=\"2\" cellspacing=\"1\" width=\"95%\"
    144.  
    145. border=\"0\" bgcolor=\"$tableColor\">";
    146.  
    147. echo "<tr bgcolor=\"$headerColor\"><td><
    148.  
    149. font face=\"$fontFace\" color=\"$headerFontColor\"
    150.  
    151. size=\"$fontSize\">Браузер
    152.  
    153. </font>
    154.  
    155. </td><td><font face=\"$fontFace\" color=\"$headerFontColor\"
    156.  
    157. size=\"$fontSize\">IP</font></td>
    158.  
    159. <td><font face=\"$fontFace\" color=\"$headerFontColor\"
    160.  
    161. size=\"$fontSize\">Хост</font></td>
    162.  
    163. <td><font face=\"$fontFace\" color=\"$headerFontColor\"
    164.  
    165. size=\"$fontSize\">Ссылка</font></td>
    166.  
    167. <td><font face=\"$fontFace\" color=\"$headerFontColor\"
    168.  
    169. size=\"$fontSize\">Страница</font></td>
    170.  
    171. <td><font face=\"$fontFace\" color=\"$headerFontColor\"
    172.  
    173. size=\"$fontSize\">Время визита</font></td></tr>";
    174.  
    175. echo "</font><font face=\"$fontFace\" size=\"$fontSize\">";
    176.  
    177. //открываю файл и запускаю цикл
    178.  
    179. $fbase=file($fileName);
    180.  
    181. $fbase = array_reverse($fbase);
    182.  
    183. for ($i=0; $i<$maxVisitors; $i++) :
    184.  
    185. if ($i>= sizeof($fbase)) {break;}
    186.  
    187. $s = $fbase[$i];
    188.  
    189. //разделяю
    190.  
    191. $strr = explode("::", $s);
    192.  
    193. if (empty($strr)) {break;}
    194.  
    195. //вывожу данные
    196.  
    197. echo "<tr><td bgcolor=\"$rowColor\"><
    198.  
    199. font face=\"$fontFace\" color=\"$fontColor\"
    200.  
    201. size=\"$fontSize\">$strr[0]</font>
    202.  
    203. </td><td bgcolor=\"$rowColor\"><
    204.  
    205. font face=\"$fontFace\" color=\"$fontColor\"
    206.  
    207. size=\"$fontSize\">$strr[1]</font>
    208.  
    209. </td><td bgcolor=\"$rowColor\"><
    210.  
    211. font face=\"$fontFace\" color=\"$fontColor\"
    212.  
    213. size=\"$fontSize\">$strr[2]</font>
    214.  
    215. </td><td bgcolor=\"$rowColor\"><
    216.  
    217. font face=\"$fontFace\" color=\"$fontColor\"
    218.  
    219. size=\"$fontSize\">$strr[3]</font>
    220.  
    221. </td><td bgcolor=\"$rowColor\"><
    222.  
    223. font face=\"$fontFace\" color=\"$fontColor\"
    224.  
    225. size=\"$fontSize\">$strr[4]</font>
    226.  
    227. </td><td bgcolor=\"$rowColor\"><
    228.  
    229. font face=\"$fontFace\" color=\"$fontColor\"
    230.  
    231. size=\"$fontSize\">$strr[5]</font></td>
    232.  
    233. </tr>";
    234.  
    235. endfor;
    236.  
    237. }
    238.  
    239. ?>  
    файл шапки -
    PHP:
    1. <?php
    2.  
    3. include("sniffer.php");
    4.  
    5. if (! isset($$cookieName)) :
    6.  
    7. //установить куки
    8.  
    9. setcookie($cookieName, $cookieValue, time()+$timeLimit);
    10.  
    11. saveUserData();
    12.  
    13. endif;
    14.  
    15. ?>
    Есть мнение что это из-за того что sniffer подключается до cookie, а в нём много echo. Пробовал вытаскивать из него переменные а подключать после cookie - всё равно не работает =( Помогите пожалуйста!
     
  9. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Есть мнение, что на севрере отключеная опция register_long_arrays.
     
  10. Nelepostb

    Nelepostb Активный пользователь

    С нами с:
    20 фев 2011
    Сообщения:
    15
    Симпатии:
    0
    Адрес:
    НН
    Хм насколько я понял из документации эта функция доступна с версии PHP 5.0.0. а это написано вроде для 4 версии вроде. могу ошибаться.