Аплоад файла + запись в лог

Discussion in 'PHP' started by .::BARS::., 23 Apr 2009.

  1. .::BARS::.

    .::BARS::. Elder - Старейшина

    Joined:
    13 Oct 2007
    Messages:
    379
    Likes Received:
    45
    Reputations:
    10
    Привет всем... вот такой вопрос...
    Нужно сделать 2 формы загрузки файла
    1 по http
    2 с локального компа
    -----
    По время загрузки файл меняет имя на то что указываю я.... + в файл пишет имя файла...
    Файл должен переименовываться, не трогая расшерение... + можно грузить только файл определенного формата...
    кто может подсказать код?
     
  2. Krist_ALL

    Krist_ALL Banned

    Joined:
    14 Jan 2009
    Messages:
    436
    Likes Received:
    193
    Reputations:
    24
    А чтотут сложного?
    <form action=..><input type=file><input type=submit></form> Поищи в поисковике маны на тему php + upload file

    например вот статья про Upload http://www.phpclub.ru/detail/article/upload
    а вот стетья про запись в файл http://www.kurepin.ru/php/files/
     
    #2 Krist_ALL, 23 Apr 2009
    Last edited: 23 Apr 2009
  3. OdaN

    OdaN Elder - Старейшина

    Joined:
    4 Mar 2006
    Messages:
    192
    Likes Received:
    17
    Reputations:
    1
    PHP:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>Загрузка файла на сервер</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
    <?php
    $do
    =$_GET["do"];

    switch (
    $do) {
    case 
    "upload":
    $uploaddir='upload/';
    $userfile=$_FILES['userfile']['name'];
    $ext=strrchr($userfile'.');

    if (
    $ext == '.zip') die ("Нельзя загружать файлы с расширением zip");
    //if ($ext !== '.zip') die ("Можно загружать только файлы с расширением zip");

    $newfilename=date("U")."$ext";

    move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir $newfilename);

    echo 
    "Имя файла на сервере: $uploaddir$newfilename<br>
    Тип файла:"
    .$_FILES['userfile']['type'];

    $log fopen("fileupload.log""a");
    fwrite($log"$newfilename\n");

    break;
    default:
    ?>
    <form method="POST" action="?do=upload" enctype=multipart/form-data>
    <input type="file" name="userfile">
    <input type="submit">
    </form>
    <? ?>
    </body>
    </html>
     
    #3 OdaN, 23 Apr 2009
    Last edited: 23 Apr 2009
    1 person likes this.
  4. Twoster

    Twoster Members of Antichat

    Joined:
    20 Aug 2008
    Messages:
    287
    Likes Received:
    402
    Reputations:
    159
    А если шелл, то можно? =)
     
    1 person likes this.
  5. OdaN

    OdaN Elder - Старейшина

    Joined:
    4 Mar 2006
    Messages:
    192
    Likes Received:
    17
    Reputations:
    1
    Ну может это будет специальная форма по заливке шеллов =)
     
    1 person likes this.
  6. Twoster

    Twoster Members of Antichat

    Joined:
    20 Aug 2008
    Messages:
    287
    Likes Received:
    402
    Reputations:
    159
    Твой скрипт уязвим в нескольких местах.

    Во-первых если уж такая пьянка, нужно исходить от обратного, проверять допустимые значения, а не недопустимые.

    Во-вторых, всегда нужно проверять данные при записи в файл. У тебя они идут туда в необработаном виде.
     
  7. OdaN

    OdaN Elder - Старейшина

    Joined:
    4 Mar 2006
    Messages:
    192
    Likes Received:
    17
    Reputations:
    1
    Ну во первых у меня там можно заменить
    Code:
    if ($ext == '.zip') die ("Нельзя загружать файлы с расширением zip");
    на
    Code:
    if ($ext !== '.zip') die ("Можно загружать только файлы с расширением zip");
    Во вторых это только пример скрипта, а не полноценно работающая версия. Если это необходимо, дописать пару условий типа
    PHP:
    if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir $newfilename)) {

    echo 
    "Имя файла на сервере: $uploaddir$newfilename<br> 
    Тип файла:"
    .$_FILES['userfile']['type']; 

    $log fopen("fileupload.log""a"); 
    if (
    fwrite($log"$newfilename\n")) {
    еcho "лог записан"
    } else {
    echo 
    "ошибка записи в лог"; }
    } else {
    echo 
    "ошибка загрузки"; }
    не составляет особого труда
     
  8. .::BARS::.

    .::BARS::. Elder - Старейшина

    Joined:
    13 Oct 2007
    Messages:
    379
    Likes Received:
    45
    Reputations:
    10
    Спасиб...
    как проверить вес файла?
     
  9. Pernat1y

    Pernat1y Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    477
    Likes Received:
    79
    Reputations:
    7
    уже загруженного - так:
    PHP:
    //Example #1 filesize() example
    <?php
    // outputs e.g.  somefile.txt: 1024 bytes
    $filename 'somefile.txt';
    echo 
    $filename ': ' filesize($filename) . ' bytes';
    ?>