[PHP]Mail script met attachment

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • UniPer
  • Registratie: April 2003
  • Laatst online: 17-09 11:29
Hi,

Ik zit met het volgende: Ik gebruik onderstaand script om een ingevuld (web-)formulier te laten versturen via de mail. Dit werkt perfect op twee kleine dingetjes na.

Als ik de $max_allowed_file_size, die momenteel op 1024KB staat ingesteld, vergroot naar bijv. 3000KB,
dan worden attachments die rond de 2MB liggen nog steeds niet verstuurd. Dit terwijl de mail wel verstuurd wordt, de bestandsnaam ook in de mail genoemd wordt, alleen zit de bijlage er niet bij :?

Het andere probleem is dat als ik de $max_allowed_file_size op 1024KB laat staan maar ik probeer een attachment toe te voegen van bijv. 8MB en ik druk op submit, dan reload de pagina heel snel zonder foutmelding. :?

Enig idee waar dit fout gaat?

*knip*

[ Voor 72% gewijzigd door MueR op 07-06-2010 16:16 ]

Do not argue with an idiot. He will drag you down to his level and beat you with experience.


Acties:
  • 0 Henk 'm!

  • McKaamos
  • Registratie: Maart 2002
  • Niet online

McKaamos

Master of the Edit-button

Das leuk, zo'n variabele in je script, maar vreet de PHP parser het wel?
Die heeft namelijk z'n eigen voorkeuren wat betreft memory gebruikt, file upload size, script verwerkingstijd, etc etc.
Kan je allemaal vinden in php.ini.

Iemand een Tina2 in de aanbieding?


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Die 150 regels code zijn weg. We willen alleen relevante code, niet je hele script. Zorg dus even dat je het problematische stuk code vind (Programming FAQ - Debuggen: hoe doe ik dat?) dan kunnen we je wel helpen.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • UniPer
  • Registratie: April 2003
  • Laatst online: 17-09 11:29
Hierin staat:
code:
1
2
3
4
max_execution_time = 30     ; Maximum execution time of each script, in seconds
max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
;max_input_nesting_level = 64 ; Maximum input variable nesting level
memory_limit = 128M      ; Maximum amount of memory a script may consume (128MB)


Volgens mij overschrijd ik deze limieten niet. Dus dat lijkt me geen probleem..

Do not argue with an idiot. He will drag you down to his level and beat you with experience.


Acties:
  • 0 Henk 'm!

  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

offtopic:
Is het niet netter om die checks in functies te doen?

Zodat je : if( validatie1()&&validatie2()&&validatie3() ) kunt doen? is ook wat leesbaarder.

Nog mooier is eea met reflectie en een aparte validatieklasse.

i3 + moederbord + geheugen kopen?


Acties:
  • 0 Henk 'm!

  • UniPer
  • Registratie: April 2003
  • Laatst online: 17-09 11:29
MueR schreef op maandag 07 juni 2010 @ 16:17:
Die 150 regels code zijn weg. We willen alleen relevante code, niet je hele script. Zorg dus even dat je het problematische stuk code vind (Programming FAQ - Debuggen: hoe doe ik dat?) dan kunnen we je wel helpen.
Als ik wist waar het fout ging had ik inderdaad alleen dat stukje gepost, maarja..dat weet ik dus niet.

Dan nu maar de stukken aangaande de attachment, hier gaat het (denk ik) ergens fout:
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
$max_allowed_file_size = 1024; // size in KB 

if(isset($_POST['submit']))
{
    //Get the uploaded file information
    $name_of_uploaded_file =  basename($_FILES['uploaded_file']['name']);
    
    //get the file extension of the file
    $type_of_uploaded_file = substr($name_of_uploaded_file, 
                 strrpos($name_of_uploaded_file, '.') + 1);
    
    $size_of_uploaded_file = $_FILES["uploaded_file"]["size"]/1024;

    if($size_of_uploaded_file > $max_allowed_file_size ) 
    {
$errors .= "\n Het bestand is te groot, de maximale bestandsgrootte is $max_allowed_file_size KB";
    }

    $path_of_uploaded_file = $upload_folder . $name_of_uploaded_file;
    $tmp_path = $_FILES["uploaded_file"]["tmp_name"];
        
    if(is_uploaded_file($tmp_path))
      {
                    if(!copy($tmp_path,$path_of_uploaded_file))
                    {
                    $errors .= '\n error while copying the uploaded file';
                    }
                   }

[ Voor 53% gewijzigd door UniPer op 07-06-2010 16:24 ]

Do not argue with an idiot. He will drag you down to his level and beat you with experience.


Acties:
  • 0 Henk 'm!

  • McKaamos
  • Registratie: Maart 2002
  • Niet online

McKaamos

Master of the Edit-button

UniPer schreef op maandag 07 juni 2010 @ 16:18:
Hierin staat:
code:
1
2
3
4
max_execution_time = 30     ; Maximum execution time of each script, in seconds
max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
;max_input_nesting_level = 64 ; Maximum input variable nesting level
memory_limit = 128M      ; Maximum amount of memory a script may consume (128MB)


Volgens mij overschrijd ik deze limieten niet. Dus dat lijkt me geen probleem..
Je vergeet nog wat dingen ;)
Max upload size, max temp file size, etc.
Staan wat verder naar beneden in php.ini


Edit:
Oh, en als je gaat debuggen, zet dan deze twee even aan het begin van je script:
ini_set('display_errors', "1");
ini_set('error_reporting', "E_ALL");

Elk suf wissewasje wordt dan aangegeven, inclusief regelnummer waar het fout gaat.

[ Voor 16% gewijzigd door McKaamos op 07-06-2010 16:26 ]

Iemand een Tina2 in de aanbieding?


Acties:
  • 0 Henk 'm!

  • UniPer
  • Registratie: April 2003
  • Laatst online: 17-09 11:29
McKaamos schreef op maandag 07 juni 2010 @ 16:22:
[...]

Je vergeet nog wat dingen ;)
Max upload size, max temp file size, etc.
Staan wat verder naar beneden in php.ini


Edit:
Oh, en als je gaat debuggen, zet dan deze twee even in je headers:
ini_set('display_errors', "1");
ini_set('error_reporting', "E_ALL");

Elk suf wissewasje wordt dan aangegeven, inclusief regelnummer waar het fout gaat.
Deze staan ingesteld op 5 MB

Do not argue with an idiot. He will drag you down to his level and beat you with experience.


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

UniPer schreef op maandag 07 juni 2010 @ 16:20:
Als ik wist waar het fout ging had ik inderdaad alleen dat stukje gepost, maarja..dat weet ik dus niet.
Dan moet je dus gaan debuggen. Lukt de upload van de file uberhaupt wel, lukt het wegschrijven naar een map op je server? Vraag het anders even aan diegene die het geschreven heeft. Bekijk ook de handleiding eens.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • UniPer
  • Registratie: April 2003
  • Laatst online: 17-09 11:29
MueR schreef op maandag 07 juni 2010 @ 16:32:
[...]

Dan moet je dus gaan debuggen. Lukt de upload van de file uberhaupt wel, lukt het wegschrijven naar een map op je server? Vraag het anders even aan diegene die het geschreven heeft. Bekijk ook de handleiding eens.
Dat is gewoon een kweste van mijn start topic lezen, dat heb je dus niet echt gedaan zoals ik het lees.

De fileupload lukt wel!
De folder op de server is writeable dus de file komt daar te staan.

Alleen...files groter dan 2.5 MB lijken niet te worden verzonden, terwijl het script ze wel herkend want de bevestigings mail noemt wel de bestandsnaam. Dus ze worden wel 'behandeld' door het script alleen niet geupload en meegestuurd.

Tevens komt er geen foutmelding op de pagina te staan dat de bijlage te groot is als ik er bijv. 1 van 8MB wil versturen.

Do not argue with an idiot. He will drag you down to his level and beat you with experience.


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15:14

Creepy

Tactical Espionage Splatterer

Maar ben je wel gaan debuggen? Weet je 100% zeker dat de files die je upload wel op het filesysteem staan? Weet je vervolgens 100% zeker dat het script ook daadwerkelijke de attachment aanmaakt en als klap op de vuurpijl: wat doet je MTA vervolgens met de mail? Bekijk de logs van php, apache en me MTA eens. Ga nu eens debuggen en stap voor stap alles proberen te doorlopen. Laat je script eens stoppen na je fileupload en voordat je mail gaat vertsturen. Dat is waar MueR op doelt. Hij heeft wel degelijk je bericht gelezen. Maar nergens zeg je dat je het te grote bestand dat niet wordt gemailed WEL op het filesysteem staan. Nergens noem je dat je de webserver logs hebt bekeken etc.

Besef je je trouwens ook dat een BASE64 encoded file iets meer geheugen kost dan de daadwerkelijke file zelf? Heb je het geheugengebruik van je script al gecontroleerd? Anyway, nog genoeg openstaande vragen dus.

[ Voor 13% gewijzigd door Creepy op 07-06-2010 16:41 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • UniPer
  • Registratie: April 2003
  • Laatst online: 17-09 11:29
Helaas heeft debuggen niet veel opgeleverd maar ik kwam er net achter dat onze virusscanner/firewall
het de upload groter dan 2.1MB tegenhield omdat hij het zag als een verdachte 'file transmit' o.i.d.

Met de firewall uit werkt het form wel goed...wordt dus een kwestie van een rule aanmaken denk..

Allen toch bedankt voor suggesties en de hulp, ik zit met nog een klein vraagje maar zal hiervoor een nieuwe topic openen.

Do not argue with an idiot. He will drag you down to his level and beat you with experience.

Pagina: 1