[PHP] uploaden van grote bestanden mislukt...

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik gebruik het volgende script om een soort van open dir te maken waar je ook files bij up kan loaden:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
<?php
   $path = $_GET['path'];
   if(!isset($path))
   {
       $path = ".";
   }

   if ($handle = opendir($path))
   {
       $up = substr($path, 0, (strrpos(dirname($path."/."),"/")));
       print "[^]&nbsp;&nbsp;<a href='index.php?path=$up'>&eacute;&eacute;n map omhoog</a><br><br>";

       $curDir = substr($path, (strrpos(dirname($path."/."),"/")+1));
       print "************************<br>Huidige directory: ".$curDir."<br>************************<br>";   
       ?>
       <table cellpadding="0" cellspacing="0" border="0">
       <?

       while (false !== ($file = readdir($handle)))
       {
           if ($file != "." && $file != "..")
           {
               $fName = $file;
               $file = $path.'/'.$file;
               if(is_file($file))
               {
               
                   print "<tr><td>[F]</td><td style=\"width:200px;\"><a href='".$file."'>".$fName."</a></td><td align=\"right\">".round(filesize($file) /1024,1)." Kb</td><td style=\"width:200px;\" align=\"right\">".date ("d F Y H:i", filemtime($file))."</td></tr>";
                   
               }
               if(is_dir($file))

               {
                   print "<tr><td>[D]</td><td><a href='index.php?path=$file'>$fName</a></td></tr>";
               }
           }
        }
        ?>
           </table>
           <br>
          
           <?
      

       closedir($handle);
   }
?>

<?php

$site_name = $_SERVER['HTTP_HOST'];
$url_dir = "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
$url_this =  "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];

$upload_dir = "./";
$upload_url = $url_dir."/";
$message ="";

function do_upload($upload_dir, $upload_url) {

    $temp_name = $_FILES['userfile']['tmp_name'];
    $file_name = $_FILES['userfile']['name']; 
    $file_type = $_FILES['userfile']['type']; 
    $file_size = $_FILES['userfile']['size']; 
    $result    = $_FILES['userfile']['error'];
    $file_url  = $upload_url.$file_name;
    $file_path = $upload_dir.$file_name;

    //File Name Check
    if ( $file_name =="") { 
        $message = "Error: Ongeldige filenaam. Hernoem de file.";
        return $message;
    }
    //File Size Check
    else if ( $file_size > 209715200) {
        $message = "Error: De groote van de file is groter dan 200Mb. Dit is niet toegestaan.";
        return $message;
    }
    //File Type Check
    else if ( $file_type == "text/plain" ) {
        $message = "Error: Sorry, je mag geen scriptfiles uploaden hier." ;
        return $message;
    }

    $result  =  move_uploaded_file($temp_name, $file_path);
    $message = ($result)?"":"Error: Er is iets mis gegaan tijdens het uploaden. Probeer het nog eens of bel me.";

    return $message;
}

//create upload_files directory if not exist
//If it does not work, create on your own and change permission.
//if (!is_dir("upload_files")) {
//  die ("upload_files directory doesn't exist");
//}

if ($_FILES['userfile']) {
    $message = do_upload($upload_dir, $upload_url);
    header("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']));
}
else {
    $message = "";
}

print $message;


?>
<form name="upload" id="upload" enctype="multipart/form-data" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="209715200" />
  Upload Image<input type="file" id="userfile" name="userfile">
  <input type="submit" name="upload" value="Upload">
</form>


Dit werkt perfect voor kleine files, maar zodra ik grote files wil uploaden dan werkt dit niet.

Ik heb de volgende waarde in mijn php.ini opgehoogd:

max_execution_time = 1800
max_input_time = 1800
memory_limit = 200M
post_max_size = 200M

Heeft iemand een idee waar het aan kan liggen???

[ Voor 60% gewijzigd door Verwijderd op 13-01-2005 17:17 ]


Acties:
  • 0 Henk 'm!

  • Rac-On
  • Registratie: November 2003
  • Niet online
2 vragen:

1. Heb je een max_upload_size in je html form staan?
2. Welke error code krijg je mee?

1:
PHP:
1
 <input type="hidden" name="MAX_FILE_SIZE" value="300000" />


2:
PHP:
1
$print_r($HTTP_POST_FILES);


De error kan je opzoeken op php.net (zie post hieronder)

[ Voor 70% gewijzigd door Rac-On op 13-01-2005 16:16 ]

doet niet aan icons, usertitels of signatures


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
rac-on schreef op donderdag 13 januari 2005 @ 16:13:
2 vragen:

1. Heb je een max_upload_size in je html form staan?
2. Welke error code krijg je mee?
1. Nee
2. Geen error code, de file wordt gewoon niet geupload... (Na 30 sec. wordt de header verzonden en is de file niet geupload...)

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op donderdag 13 januari 2005 @ 16:15:
[...]


1. Nee
2. Geen error code, de file wordt gewoon niet geupload... (Na 30 sec. wordt de header verzonden en is de file niet geupload...)
ligt dat niet aan je client? firewall die http verbindingen na 30sec dicht gooit? heb ik wel vaker gezien namelijk :)
en die MAX_UPLOAD_SIZE was afaik verplicht ;)

[ Voor 6% gewijzigd door Erkens op 13-01-2005 16:16 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Erkens schreef op donderdag 13 januari 2005 @ 16:16:
[...]

ligt dat niet aan je client? firewall die http verbindingen na 30sec dicht gooit? heb ik wel vaker gezien namelijk :)
en die MAX_UPLOAD_SIZE was afaik verplicht ;)
Enige firewall die draait is die standaard in xp zit...

max_upload_size heb ik nu toegevoegd...

[ Voor 6% gewijzigd door Verwijderd op 13-01-2005 16:17 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Met max_upload_size werkt het nu!!!

Thanx!!!

Acties:
  • 0 Henk 'm!

Verwijderd

Apache heeft dacht ik een default setting van 30 seconden om scripts af te wikkelen.
Daardoor kunnen ook uploads de mist ingaan.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nu zit ik met een volgend probleem.

Terwijl ik een kleine met 38 characters probeer te uploaden, werkt dit niet. Maar ik kom de file wel tegen in de map van apache (c:\apache). Hoe is dit te voorkomen?

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

ik snap niet waarom je de errorcode "afhandeld" nadat je hem moved :?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Erkens schreef op donderdag 13 januari 2005 @ 17:09:
ik snap niet waarom je de errorcode "afhandeld" nadat je hem moved :?
Dat doe ik niet. Het verplaatsen van de file gebeurd in de functie do_upload. Deze is inclusief errorcode...

Heb de functie do_upload en het move_uploaded_file omgedraait... Zie script...

[ Voor 19% gewijzigd door Verwijderd op 13-01-2005 17:16 ]


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op donderdag 13 januari 2005 @ 17:13:
[...]

Dat doe ik niet. Het verplaatsen van de file gebeurd in de functie do_upload. Deze is inclusief errorcode...

Heb de functie do_upload en het move_uploaded_file omgedraait... Zie script...
ehm?

PHP:
1
2
3
4
5
6
    $result    = $_FILES['userfile']['error']; 

....

   $result  =  move_uploaded_file($temp_name, $file_path);
    $message = ($result)?"":"Error: Er is iets mis gegaan tijdens het uploaden. Probeer het nog eens of bel me.";

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Omdat ik eerst moet uploaden voordat ik een error kan krijgen...

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op donderdag 13 januari 2005 @ 17:29:
Omdat ik eerst moet uploaden voordat ik een error kan krijgen...
:?

die error message krijg je pas zodra je hebt geupload, de functie move_uploaded_file die voer je ook uit nadat er een file geupload is (zoals de naam al vermeld)
kijk nogmaals naar mijn eerste reactie in dit topic....
Pagina: 1