Internal Server Error while uploading images from web form

Discussion in 'PHP' started by levani, Oct 17, 2009.

  1. #1
    I get Internal Server Error when I try to upload files from php/html web form on my server. I use Linux server with php 5.2.

    Can anyone please tell me why does it happen?

    Thanks
     
    levani, Oct 17, 2009 IP
  2. JAY6390

    JAY6390 Peon

    Messages:
    918
    Likes Received:
    31
    Best Answers:
    0
    Trophy Points:
    0
    #2
    Can you show your form code? (it's not really a php question)
     
    JAY6390, Oct 17, 2009 IP
  3. Bohra

    Bohra Prominent Member

    Messages:
    12,573
    Likes Received:
    537
    Best Answers:
    0
    Trophy Points:
    310
    #3
    Well did u chmod the place 777 where the images are getting uploaded ?? some host need this to be 755 to work
     
    Bohra, Oct 17, 2009 IP
  4. levani

    levani Peon

    Messages:
    61
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    0
    #4
    Here is the whole code:

    <?php
    //define a maxim size for the uploaded images in Kb
    define ("MAX_SIZE","100");

    //This function reads the extension of the file. It is used to determine if the file is an image by checking the extension.
    function getExtension($str) {
    $i = strrpos($str,".");
    if (!$i) { return ""; }
    $l = strlen($str) - $i;
    $ext = substr($str,$i+1,$l);
    return $ext;
    }

    //This variable is used as a flag. The value is initialized with 0 (meaning no error found) and it will be changed to 1 if an errro occures. If the error occures the file will not be uploaded.
    $errors=0;
    //checks if the form has been submitted
    if(isset($_POST['Submit']))
    {
    //reads the name of the file the user submitted for uploading
    $image=$_FILES['image']['name'];
    //if it is not empty
    if ($image)
    {
    //get the original name of the file from the clients machine
    $filename = stripslashes($_FILES['image']['name']);
    //get the extension of the file in a lower case format
    $extension = getExtension($filename);
    $extension = strtolower($extension);
    //if it is not a known extension, we will suppose it is an error and will not upload the file, otherwize we will do more tests
    if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif"))
    {
    //print error message
    echo '<h1>Unknown extension!</h1>';
    $errors=1;
    }
    else
    {
    //get the size of the image in bytes
    //$_FILES['image']['tmp_name'] is the temporary filename of the file in which the uploaded file was stored on the server
    $size=filesize($_FILES['image']['tmp_name']);

    //compare the size with the maxim size we defined and print error if bigger
    if ($size > MAX_SIZE*1024)
    {
    echo '<h1>You have exceeded the size limit!</h1>';
    $errors=1;
    }

    //we will give an unique name, for example the time in unix time format
    $image_name=time().'.'.$extension;
    //the new name will be containing the full path where will be stored (images folder)
    $newname="images/".$image_name;
    //we verify if the image has been uploaded, and print error instead
    $copied = copy($_FILES['image']['tmp_name'], $newname);
    if (!$copied)
    {
    echo '<h1>Copy unsuccessfull!</h1>';
    $errors=1;
    }}}}

    //If no errors registred, print the success message
    if(isset($_POST['Submit']) && !$errors)
    {
    echo "<h1>File Uploaded Successfully! Try again!</h1>";
    }

    ?>

    <!--next comes the form, you must set the enctype to "multipart/frm-data" and use an input type "file" -->
    <form name="newad" method="post" enctype="multipart/form-data" action="">
    <table>
    <tr><td><input type="file" name="image"></td></tr>
    <tr><td><input name="Submit" type="submit" value="Upload image"></td></tr>
    </table>
    </form>
     
    levani, Oct 17, 2009 IP
  5. Bohra

    Bohra Prominent Member

    Messages:
    12,573
    Likes Received:
    537
    Best Answers:
    0
    Trophy Points:
    310
    #5
    is the images directory chmodded to 777 ??
     
    Bohra, Oct 17, 2009 IP
  6. levani

    levani Peon

    Messages:
    61
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    0
    #6
    Yes it is! Should it show the Internal Server Error if it wouldn't?
     
    levani, Oct 17, 2009 IP
  7. Bohra

    Bohra Prominent Member

    Messages:
    12,573
    Likes Received:
    537
    Best Answers:
    0
    Trophy Points:
    310
    #7
    Set it to 755 and try uploading and see .. do u get the error only when ur uploading or when u open the upload page itself
     
    Bohra, Oct 17, 2009 IP
  8. levani

    levani Peon

    Messages:
    61
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    0
    #8
    No I get this error only once I click the upload button. The same happens for 755 chmod!
     
    levani, Oct 17, 2009 IP
  9. Bohra

    Bohra Prominent Member

    Messages:
    12,573
    Likes Received:
    537
    Best Answers:
    0
    Trophy Points:
    310
    #9
    Do u see any errors in the error_log file ?
     
    Bohra, Oct 17, 2009 IP
  10. ThomasTwen

    ThomasTwen Peon

    Messages:
    113
    Likes Received:
    4
    Best Answers:
    0
    Trophy Points:
    0
    #10
    How about the time? The maximum time php scripts can load is limited to, like, 60 seconds, depending on your server. This usually is a problem when uploading files.

    Add the following at the beginning of your script to remove the limit:
    set_time_limit(0);
    Code (markup):
    http://php.net/manual/en/function.set-time-limit.php


    Your web hoster might have disabled this function.


    Another thing is the maximum amount of memory your script is allowed to use... you can't change that, your webhoster has to.



    I'm not 100% sure if your error message corresponds to the 2 things mentioned above, Google is not clear on it. Would be nice if someone could clarify.
     
    ThomasTwen, Oct 17, 2009 IP