[php] Grote bestanden uploaden niet goed

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Voor mijn site, (justmental): doe maar niet, is het de bedoeling dat geregistreerde leden drivers kunnen uploaden. Nu gaat dit goed tot ong. 5 MB, maar daarboven (ik heb het geprobeerd met een 15 MB file) gaat het fout.

Nu gebruik ik er een class voor, vanaf phpclasses.org, dat is deze:

code:
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
Class Upload
{
    var $maxupload_size = 500000;
    
    var $_FILES;
    var $errors;
    
    function Upload($_FILES)
    {
        $this->HTTP_POST_FILES = $_FILES;
        $this->isPosted = false;
    }
    
    function save($directory, $field, $overwrite,$mode=0777)
    {
        $this->isPosted = true;
        if ($this->HTTP_POST_FILES[$field]['size'] < $this->maxupload_size && $this->HTTP_POST_FILES[$field]['size'] >0)
        {
            $noerrors = true;
            $this->isPosted = true;
            // Get names
            $tempName  = $this->HTTP_POST_FILES[$field]['tmp_name'];
            $file      = $this->HTTP_POST_FILES[$field]['name'];
            $all       = $directory.$file;

            // Copy to directory
            if (file_exists($all))
            {
                if ($overwrite)
                {
                    @unlink($all)         || $noerrors=false; $this->errors  = "Upload class save error: unable to overwrite ".$all."<BR>";
                    @copy($tempName,$all) || $noerrors=false; $this->errors .= "Upload class save error: unable to copy to ".$all."<BR>";
                    @chmod($all,$mode)    || $ernoerrorsrors=false; $this->errors .= "Upload class save error: unable to change permissions for: ".$all."<BR>";
                }
            } else{
                @copy($tempName,$all)   || $noerrors=false;$this->errors  = "Upload class save error: unable to copy to ".$all."<BR>";
                @chmod($all,$mode)      || $noerrors=false;$this->errors .= "Upload class save error: unable to change permissions for: ".$all."<BR>";
            }
            return $noerrors;
        } elseif ($this->HTTP_POST_FILES[$field]['size'] > $this->maxupload_size) {
            $this->errors = "File size exceeds maximum file size of ".$this->maxuploadsize." bytes";
            return false;
        } elseif ($this->HTTP_POST_FILES[$field]['size'] == 0) {
            $this->errors = "File size is 0 bytes";
            return false;
        }
    }
    
    function saveAs($filename, $directory, $field, $overwrite,$mode=0777)
    {
        $this->isPosted = true;
        if ($this->HTTP_POST_FILES[$field]['size'] < $this->maxupload_size && $this->HTTP_POST_FILES[$field]['size'] >0)
        {
            $noerrors = true;

            // Get names
            $tempName  = $this->HTTP_POST_FILES[$field]['tmp_name'];
            $all       = $directory.$filename;
            
            // Copy to directory
            if (file_exists($all))
            {
                if ($overwrite)
                {
                    @unlink($all)         || $noerrors=false; $this->errors  = "Upload class saveas error: unable to overwrite ".$all."<BR>";
                    @copy($tempName,$all) || $noerrors=false; $this->errors .= "Upload class saveas error: unable to copy to ".$all."<BR>";
                    @chmod($all,$mode)    || $noerrors=false; $this->errors .= "Upload class saveas error: unable to copy to".$all."<BR>";
                }
            } else{
                @copy($tempName,$all)   || $noerrors=false; $this->errors  = "Upload class saveas error: unable to copy to ".$all."<BR>";
                @chmod($all,$mode)      || $noerrors=false; $this->errors .= "Upload class saveas error: unable to change permissions for: ".$all."<BR>";
            }
            return $noerrors;
        } elseif ($this->HTTP_POST_FILES[$field]['size'] > $this->maxupload_size) {
            $this->errors = "File size exceeds maximum file size of ".$this->maxuploadsize." bytes";
            return false;
        } elseif ($this->HTTP_POST_FILES[$field]['size'] == 0) {
            $this->errors = "File size is 0 bytes";
            return false;
        }
    }
    
    function getFilename($field)
    {
        return $this->HTTP_POST_FILES[$field]['name'];
    }
    
    function getFileMimeType($field)
    {
        return $this->HTTP_POST_FILES[$field]['type'];
    }
    
    function getFileSize($field)
    {
        return $this->HTTP_POST_FILES[$field]['size'];
    }

}


Maar volgens mij ligt de fout niet aan de class..

Iemand enig idee ? :/

[ Voor 12% gewijzigd door justmental op 05-08-2003 15:45 ]


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Verwijderd schreef op 05 August 2003 @ 14:56:
Voor mijn site, driverfiles.net, is het de bedoeling dat geregistreerde leden drivers kunnen uploaden. Nu gaat dit goed tot ong. 5 MB, maar daarboven (ik heb het geprobeerd met een 15 MB file) gaat het fout.

Nu gebruik ik er een class voor, vanaf phpclasses.org, dat is deze:


Class Upload
{
var $maxupload_size = 500000;
[...]
}
Maar volgens mij ligt de fout niet aan de class..

Iemand enig idee ? :/
Zie vetgedrukte text :)

volgende keer ff tussen php-tags zetten trouwens, dat leest wat prettiger dan gewone code tags

Acties:
  • 0 Henk 'm!

  • Kippenijzer
  • Registratie: Juni 2001
  • Laatst online: 26-08 09:08

Kippenijzer

McFallafel, nu met paardevlees

het zijn gewoon settings van php zelf die bepalen wat het maximum hier is, alleen weet ik zo die setting niet uit mijn hoofd... Zijn wel al meerdere topics die hierover struikelden met oplossingen en verdert zou het natuurlijk ook op php.net te vinden zijn, zijn gewoon instellingen van php zelf, en die zijn vast terug te vinden in hun online manual. Succes!

Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

er zit ergens in de php.ini zo'n setting die dit bepaald, niet boven de 5mb dacht ik.
standaard is dat de max, als je meer wilt dan moet je het veranderen

Blog [Stackoverflow] [LinkedIn]


Acties:
  • 0 Henk 'm!

  • Arnout
  • Registratie: December 2000
  • Laatst online: 17-09 21:41
php.ini >> upload_max_filesize verhogen.

Acties:
  • 0 Henk 'm!

  • Apache
  • Registratie: Juli 2000
  • Laatst online: 16-09 10:29

Apache

amateur software devver

afaik moet je de max memory limits in je php.ini verhogen maar ook in je httpd.conf omdat de files eerst naar het geheugen worden geupload. Ik vrees dat je hosting provider hier niet zo gelukkig mee zal zijn.

If it ain't broken it doesn't have enough features


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ok bedankt voor de info =] ik ga het mijn hosting provider even vragen, maar ik vrees dat die het niet zal verhogen ..

Acties:
  • 0 Henk 'm!

  • Arnout
  • Registratie: December 2000
  • Laatst online: 17-09 21:41
Apache >> ik heb 15M upload limit gezet zonder aan httpd.conf te sleutelen, gaat prima.

digitalghost >> Vergeet niet dat het uploaden van grote bestanden (> 5 MB) erg lang *kan* duren (16kb/sec upload gem.) zonder dat de gebruiker "progress" ziet.

[ Voor 15% gewijzigd door Arnout op 05-08-2003 15:18 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Er is een upload script wat de progress laat zien.

Zie bijv:

http://www.faqchest.com/p...22/php02090920_31400.html

of zoek op google naar php upload progress bar

[ Voor 5% gewijzigd door Verwijderd op 05-08-2003 15:22 ]


Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

je kan ook dat invision file manager php scriptje gebruiken.
werkt wel prettig maar das meer voor de lol denk ik, niet om professioneel in te zetten.

Blog [Stackoverflow] [LinkedIn]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Verwijderd schreef op 05 augustus 2003 @ 15:22:
Er is een upload script wat de progress laat zien.

Zie bijv:

http://www.faqchest.com/p...22/php02090920_31400.html

of zoek op google naar php upload progress bar
Het gegeven script laat niet 'de progress' maar dat er progress is. Gewoon een soort 'even geduld'. Het laat niet zien hoe ver hij al is. Dit is met php niet mogenlijk zonder flink in apache te hacken of gebruik te maken van een (untrusted) activeX component.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Janoz schreef op 05 augustus 2003 @ 15:39:
[...]


Het gegeven script laat niet 'de progress' maar dat er progress is. Gewoon een soort 'even geduld'. Het laat niet zien hoe ver hij al is. Dit is met php niet mogenlijk zonder flink in apache te hacken of gebruik te maken van een (untrusted) activeX component.
wat versta jij onder 'flink inhacken' ?
je kunt toch gewoon de grootte van de temporary file die wordt aangemaakt uitlezen en die om de zoveel seconde weergeven

Acties:
  • 0 Henk 'm!

  • Arnout
  • Registratie: December 2000
  • Laatst online: 17-09 21:41
marty schreef op 05 augustus 2003 @ 16:03:
[...]


wat versta jij onder 'flink inhacken' ?
je kunt toch gewoon de grootte van de temporary file die wordt aangemaakt uitlezen en die om de zoveel seconde weergeven
Hoe wil je dat doen? php komt pas om de hoek kijken als file upload 100%, dus klaar is.

Hacken in Apache, als in: met mod_perl aan de slag.

Acties:
  • 0 Henk 'm!

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 03-09 14:12
Er is iemand die een php extensie heeft gemaakt, waarmee wel de voortgang kan worden weergegeven.

Met een beetje geluk wordt die ook opgenomen in een van de komende php releases of in pecl.

edit:
Ok, het is dus geen extensie, maar een patch voor php: http://www.zend.com/lists/php-dev/200306/msg00075.html

[ Voor 26% gewijzigd door Rense Klinkenberg op 05-08-2003 16:41 ]


Acties:
  • 0 Henk 'm!

  • Evilbee
  • Registratie: November 2002
  • Laatst online: 18-09 17:40
Met zo'n progress-bar heb je altijd de groote van het bestand nodig. En die groote weet je alleen als je het hele bestand binnen hebt. De enige manier is denk ik de gebruiker de groote van het bestand laten opgeven.

LinkedIn - Collega worden?


Acties:
  • 0 Henk 'm!

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 03-09 14:12
Toch werkt die progress bar perfect. Waarschijnlijk wordt bij de request van de browser ook een content-length header meegestuurd, zoals de server die ook vaak naar de browser terug stuurt.

Acties:
  • 0 Henk 'm!

  • Hmmbob
  • Registratie: September 2001
  • Laatst online: 18-09 12:25
wat ook kan zijn, om even terug naar het probleem van TS te gaan, is dat de max-execution-time in het geding komt. Dat was bij een van mijn file-uploads.

Sometimes you need to plan for coincidence


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
MetHod schreef op 05 August 2003 @ 16:06:
[...]

Hoe wil je dat doen? php komt pas om de hoek kijken als file upload 100%, dus klaar is
Je kunt toch een windowtje laten open-poppen die zichzelf iedere 5 seconde refreshed met daarachter een php scriptje dat de bestandsgrootte van die tijdelijke file uitleest? Of denk ik nu te simpel?

Acties:
  • 0 Henk 'm!

  • Arnout
  • Registratie: December 2000
  • Laatst online: 17-09 21:41
marty schreef op 05 August 2003 @ 22:35:
[...]


Je kunt toch een windowtje laten open-poppen die zichzelf iedere 5 seconde refreshed met daarachter een php scriptje dat de bestandsgrootte van die tijdelijke file uitleest? Of denk ik nu te simpel?
Welke tijdelijke file? :)
Kijk maar eens op google, php en upload progress bars is zo eenvoudig nog niet.

/offtopic.
Pagina: 1