За последние 24 часа нас посетили 17073 программиста и 1688 роботов. Сейчас ищет 921 программист ...

Вопрос по поводу загрузки картинок на сервер

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

  1. smala

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

    С нами с:
    11 янв 2011
    Сообщения:
    137
    Симпатии:
    0
    вот простой хороший работающий скриптик
    PHP:
    1. <html>
    2. <head>
    3.   <title>Загрузка файла</title>
    4. </head>
    5. <body>
    6. <p><strong>Выбирите файл для загрузки:</strong><br />
    7. <form enctype="multipart/form-data" method="post">
    8. <input type="file" name="userfile" />
    9. <br />
    10. <input type="submit" value="Загрузить" name="button">
    11. </form>
    12. <?php
    13. //Выполняем код только при нажатии на кнопку
    14. if($_POST['button']== true){
    15. //Для начала проверим не пытаются ли нам загрузить файл с расширением .php и т.д
    16. $path = array(".php",".php4",".php3",".phtml",".pl");
    17.  foreach ($path as $item){
    18.  //Проверяем регулярным выражением регистр
    19.   if(preg_match("/$item\$/i", $_FILES['userfile']['name'])) {
    20.    echo "Разрешено загружать, только картинки<br />";
    21.    echo "<a href='index.php'>&lt;&lt;&lt; Назад</a>";
    22.    exit();
    23.   }
    24.  }
    25. //Проверим на ошибки, если они есть прекращаем скрипт и создаем отчет
    26. if($_FILES['userfile']['error'] != 0){
    27. //Создаем файл и записываем  него код ошибки, а так же удаляем временный файл
    28. $error = fopen("error/error.dat","wb");
    29. if(fwrite($error,$_FILES['userfile']['error']) == false){
    30.     echo "Ошибка записи в файл!!!";
    31.     exit();
    32. }else
    33. {
    34.     echo "<b>error.dat</b> - был успешно создан! &nbsp;&nbsp;<a href='error/error.inc'>Смотреть код ошибки</a>";
    35.     //Удаляем временный файл
    36.     unlink($_FILES['userfile']['tmp_name']);
    37.     //выходим
    38.     exit();
    39. }
    40. fclose($error);
    41. }
    42. //Определяем директорию, куда будем загружать изображения
    43. $dir = 'img/';
    44. $file = $dir.basename($_FILES['userfile']['name']);
    45.  
    46. if (move_uploaded_file($_FILES['userfile']['tmp_name'], $file)) {
    47.     echo "Файл успешно загружен.";
    48. } else {
    49.     echo "Произошла ошибка";
    50.     exit;
    51. }
    52. }
    53. ?>
    54. </body>
    55.  
    56. </html>
    он сохраняет изображения в папку с исходным именем файла, так вот в чем весь вопрос, у меня переменная которая по количеству файлов в папке выдает результат, прибавляем 1 и можно под этим значением сохранять, так вот как сделать чтоб картинки переименовывались в значение этой переменной, чтоб было 1.jpg 2.jpg , ну и так далее...))) в общем как значение переменной загнать в имя файла??? например если перемення $i=3 то как сделать чтоб изображение сохранялось под таким назманием))

    [/php]
     
  2. Devzirom

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

    С нами с:
    15 фев 2009
    Сообщения:
    463
    Симпатии:
    0
    Адрес:
    Пермь
    $i = 3;

    44 строка
    $file = $dir . $i . '.jpg';

    Будет img/3.jpg
     
  3. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Молодец, три шутки сразу =D
     
  4. smala

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

    С нами с:
    11 янв 2011
    Сообщения:
    137
    Симпатии:
    0
    гг , ну просто то работает, но слишком замудренный, то просто но не работает, то без защиты, а тут с защитой - поэтому хорошый, простой - потомучто без лишних функций - и работающий, потомучто реально работает)))) вроде все обьяснил))))
     
  5. smala

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

    С нами с:
    11 янв 2011
    Сообщения:
    137
    Симпатии:
    0
    Спасибо буду пробовать=)))
     
  6. smala

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

    С нами с:
    11 янв 2011
    Сообщения:
    137
    Симпатии:
    0
    Спасибо, работает=))
     
  7. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Защита дырявая, по этому плохой
    Функций лишних полно
    Всё это делается проще в 100 раз (а временный файл и вовсе сам автоматом удаляется) по этому слишком накрученный (причём зря)
    Сегодня да, а завтра выйдет какой нибудь апдейт для РНР, или какой нибудь пьяный админ поменяет настройки на серваке, и вместо исправления какой нибудь одной строчки придётся переписывать всё заново...
     
  8. smala

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

    С нами с:
    11 янв 2011
    Сообщения:
    137
    Симпатии:
    0
    ну я значит noob но мне пока подойдет, и такая)))
     
  9. siiXth

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

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    мягко сказано

    PHP:
    1. $path = array(".php",".php4",".php3",".phtml",".pl");
    2.   foreach ($path as $item){
    3.   //Проверяем регулярным выражением регистр
    4.    if(preg_match("/$item\$/i", $_FILES['userfile']['name'])) {
    5.    echo "Разрешено загружать, только картинки<br />";
    6.    echo "<a href='index.php'>&lt;&lt;&lt; Назад</a>";
    7.    exit();
    курим бамбук
    автор кода изобретает велосипед. действительно - зачем перечислять единицы допустимых форматов если можно перечислять сотни запрещённых ? :D
    и сравнение регуляркой...всю жизнь делаю in_array
     
  10. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    А если так? :)

    PHP:
    1. <?php
    2. $form = <<<HTML
    3. <form action="" enctype="multipart/form-data" method="post">
    4.  <input name="file" type="file" value="" />
    5.  <input name="submit" type="submit" value="Отправить" />
    6. </form>
    7. HTML;
    8. if (!isset ($_FILES['file'])) {
    9.     echo $form;
    10. } else {
    11.     $dirname = dirname (__FILE__) . '\uploads\\';
    12.     if (!is_dir ($dirname)) {
    13.         mkdir ($dirname, 0777);
    14.     }
    15.     $path = $dirname . basename ($_FILES['file']['name']);
    16.     $tmpfile = $_FILES['file']['tmp_name'];
    17.     $array = array ("php", "php3", "php4", "php5", "php6", "phtml", "phps");
    18.     $extension = pathinfo ($path);
    19.     $extension = $extension['extension'];
    20.     if (array_search ($extension, $array)) {
    21.         die ("Hacking attempt!");
    22.     }
    23.     $array = array ("image/bmp", "image/gif", "image/jpeg", "image/png", "image/tiff");
    24.     $getimagesize = getimagesize ($tmpfile);
    25.     $mimetype = $getimagesize['mime'];
    26.     if (!array_search ($mimetype, $array)) {
    27.         die ("Hacking attempt!");
    28.     }
    29.     if (!is_uploaded_file ($tmpfile)) {
    30.         die ("Hacking attempt!");
    31.     }
    32.     move_uploaded_file ($tmpfile, $path);
    33.     echo $form;
    34. }
    35. ?>
     
  11. siiXth

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

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    PHP:
    1. $array = array ("php", "php3", "php4", "php5", "php6", "phtml", "phps");
    тут нужно перечислять не запрещённые форматы , а разрешённые
    jpg,jpeg,bmp и т.д
    потом вместо
    менять на in_array
    где $array - массив с разрешёнными форматами
    а $extension - формат загружаемого файла. можно разбивать explode(".",$filename) и брать ячейку с номером 1 (разумеется предварительно проверив чтобы в данном массиве было 2 ячейки - 0 и 1. imagename.jpg.php могут похерить )
     
  12. Roomlife

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

    С нами с:
    6 авг 2010
    Сообщения:
    34
    Симпатии:
    0
    Делал себе простую загрузку, мини-файловая помойка)
    в файле upload.html
    Код (Text):
    1. <html>
    2. <head>
    3.   <title>Загрузка файлов на сервер</title>
    4. </head>
    5. <body>
    6.       <h2><p><b> Форма для загрузки файлов </b></p></h2>
    7.       <form action="upload.php" method="post" enctype="multipart/form-data">
    8.       <input type="file" name="filename"><br>
    9.       <input type="submit" value="Загрузить"><br>
    10.       </form>
    11. </body>
    12. </html>
    и в той же папке файл upload.php
    Код (Text):
    1. <html>
    2. <head>
    3.   <title>Результат загрузки файла</title>
    4. </head>
    5. <body>
    6. <?php
    7.    if($_FILES["filename"]["size"]["type"] > 1024*3*1024)
    8.    {
    9.      echo ("Размер файла превышает три мегабайта"); //первый баг - пропускает файлы больше заданного объема
    10.     {
    11.  
    12. $allowed_filetypes = array('.jpg','.JPG','.Jpg','.gif','.GIF','.Gif','.bmp','.BMP','.Bmp','.png','.PNG','.Png'); // допустимые форматы.
    13. if(in_array($allowed_filetypes)){
    14.      echo('Данный формат не поддерживается.'); //второй баг - функция не работает, любой загружаемый файл принимает расширение .jpg
    15. }
    16.    }
    17. exit;
    18. }
    19. $uploaddir = '../photos/1/'; //указываем папку на сервер куда грузить
    20.  
    21. $pass=md5(uniqid(rand(),true)); //генерируем новое имя файла в виде рандомного md5
    22.  
    23. $new_name = $pass;  // индийский код :)
    24. $namefile = "$new_name".".jpg"; //файлу задается строгое расширение
    25. $filename = $namefile;
    26. $uploadfile = $uploaddir.basename($namefile = "$new_name".".jpg");
    27. if (move_uploaded_file($_FILES['filename']['tmp_name'], $uploadfile))
    28.    {
    29.      echo("Файл успешно загружен <br>");
    30.      echo("Характеристики файла: <br>");
    31.      echo ("Имя файла: <b>$namefile</b> ");
    32.      echo("<br>Размер файла: ");
    33.      echo($_FILES["filename"]["size"]);
    34.      echo("<br>Каталог для загрузки: $uploaddir ");
    35.      echo("<br>Тип файла: ");
    36.      echo($_FILES["filename"]["type"]);
    37.    } else {
    38.       echo("Ошибка загрузки файла");
    39.    }
    40. ?>
    41.  
    42.  
    43. <br>
    44. <table width="600" border="0" cellpadding="2" cellspacing="0">
    45.     <tr heigth="2">
    46.         <td heigth="2" bgcolor="black"></td>
    47.     </tr>
    48. </table>
    49.  
    50. <font face="tahoma" size="2"><b>
    51. <table border="0" cellpadding="2" cellspacing="0">
    52.  
    53.  
    54. <tr><td><b><?php echo $namefile ?></b></td><td width="134"></td><td align="left"><a href="<?php echo $uploadfile ?>">Ссылка к файлу </a></td></tr>
    55. <tr height="2"><td height="2" colspan="3" bgcolor="black"></td></tr>
    56.  
    57. <br><br>
    58.  
    59. </table>
    60. </b></font>
    61. </body>
    62. </html>
    в принципе все) использовался для личных нужд, поэтому баг с загрузкой любого файла был не критичен) если надо - можешь доработать с исправлением)