PHPMailer mellékletet

szavazat
2

Én ezt a fájlt csatolni egy e-mail után feltölti azokat a saját szerver:

for ($i = 0; $i <= 2; $i++)
{
    $mail->AddAttachment($locatie.$_FILES['uploaded'.$i]['name'], $_FILES['uploaded'.$i]['name']);
}

Csatolmányok nem kötelező, de ha a nem feltöltött fájlok esetén hibát jelez: a fájl nem érhető

Hogyan előzhető meg a hibát mutatja?

A kérdést 12/06/2011 13:58
a forrás felhasználó
Más nyelveken...                            


7 válasz

szavazat
1

Mieltt melléklettel, akkor ellenőrizze, ha a feltöltött fájl létezik, pl fopen.

Válaszolt 12/06/2011 14:03
a forrás felhasználó

szavazat
1

Megoldás

for ($i = 0; $i <= 2; $i++)
{
    if (file_exists($locatie.$_FILES['uploaded'.$i]['tmp_name'])) {
        $mail->AddAttachment($locatie.$_FILES['uploaded'.$i]['tmp_name'], $_FILES['uploaded'.$i]['name']);
    }
}

frissítés

Ön által használt $locatie.$_FILES['uploaded'.$i]['name']helyett $locatie.$_FILES['uploaded'.$i]['tmp_name']a fájl betöltéséhez. Amikor egy fájlt feltölteni azt átnevezett egy ideiglenes nevet és elhelyezni az ideiglenes mappába. Ez az, ahol kapsz rá, és ezért meg kell hivatkozni, hogy a$locatie.$_FILES['uploaded'.$i]['tmp_name']

Válaszolt 12/06/2011 14:06
a forrás felhasználó

szavazat
0

Egyetértve @patapizza, de mielőtt ellenőrizze a fájlrendszer (meg kell csinálni egyébként), akkor is csak ellenőrizni $ _FILES mint

for ($i = 0; $i < count($_FILES); $i++){
    // only iterate over the number of files you actually have
}
Válaszolt 12/06/2011 14:06
a forrás felhasználó

szavazat
0

Meg kell, hogy ellenőrizze, ha a fájl ténylegesen feltöltött / létezik, mielőtt hozzáadjuk a mellékletet. Valami hasonló

for ($i = 0; $i <= 2; $i++)
{
    if (file_exists($locatie.$_FILES['uploaded'.$i]['tmp_name'])) {
        $mail->AddAttachment($locatie.$_FILES['uploaded'.$i]['tmp_name'], $_FILES['uploaded'.$i]['name']);
    }
}
Válaszolt 12/06/2011 14:06
a forrás felhasználó

szavazat
6

Lásd itt, hogyan kell kezelni fájlfeltöltéseket első:

Fájlfeltöltés kezelése

El kell olvasnia az ideiglenes fájlnév. Ami szükséges ahhoz, hogy a tényleges fájlnév, nem csak a fájl nevét.

$_FILES['userfile']['tmp_name']

Így elérhető $_FILES['userfile']['name']az írásbeli fájlnév a mellékletet, és $_FILES['userfile']['tmp_name']adja meg a fájl tényleges (az adatot) a feltöltést.

Nagyjából helyezték el a kódot, incl. érvényesítési meg kell tennie, valamint annak ellenőrzésére, hogy ez valójában egy fájlfeltöltés:

for ($i = 0; $i <= 2; $i++)
{
    # ignore file that have not been uploaded
    if (empty($_FILES['uploaded'.$i])) continue;

    # get the data of the file
    $fileName = $_FILES['uploaded'.$i]['name'];
    $filePath = $_FILES['uploaded'.$i]['tmpname'];

    # add only if the file is an upload
    is_uploaded_file($filePath) 
      && $mail->AddAttachment($filePath, $fileName)
      ;
}

A szó az óvatosság

A kód keveredik két munkahely egymással. Ez megnehezíti, hogy a hibakeresés és javítása - és vigyázni a dolgok, mint a fájl / rendszer kérdésekben és a biztonság.

Azt javaslom, hogy egy kicsit más megközelítés: Tegye lépést a másik után. Az Ön esetében, nevezetesen 1.) feldolgozza a fájlt feltöltve, és összegyűjti a szükséges adatokat, 2.) hozzá ezeket a mellékleteket.

Javíthatja az első részben, hogy egy pillantást a PHP kézikönyv. Ha azt szeretnénk, hogy támogassa a feltöltési több fájlt, azt javaslom, tájékozódást a megadott javaslatok az oldal feltöltése több fájlt . Ezt követően dolgozzuk fel felküldések és alkossák, amely tartalmazza a fájlnév a kliens számítógépen, és az utat a kiszolgáló rendszer egy bejegyzést.

// see PHP Manual for multi file uploads, this is based on it
$validAttachments = array();
foreach($_FILES['userfile']['name'] as $index => $fileName)
{
    $filePath = $_FILES['userfile']['tmp_name'][$index];
    if(is_uploaded_file($filePath))
    {
        $attachment = new stdClass;
        $attachment->fileName = $fileName;
        $attachment->filePath = $filePath;
        $validAttachments[] = $attachment;
    }        
}

Ha hiba van már abban a részében, tudja, hogy ez összefügg a fájlfeltöltés eljárást. Ez nem tesztelt kód, így csak szemléltető irányba.

A második lépés, amit aztán csak végighaladni egy ilyen tömböt, és hozzáadjuk a mellékletek:

foreach($validAttachments as $attachment)
{
    $mail->AddAttachment($attachment->filePath, $attachment->fileName);
}

Ezután jobban ellenőrizze a hibákat a különböző részek, keverés nélkül egy probléma van a másik.

Válaszolt 12/06/2011 14:07
a forrás felhasználó

szavazat
1

Én már képes megoldani ezt a problémát segítségével számláló:

$locatie = 'uploads/';
$upload_count = -1;

    for ($i = 0; $i <= 2; $i++)
    {
        if($_FILES['uploaded'.$i]['type'] != 'application/octet-stream')  // Geen php files
        {
            $folder = $locatie.basename($_FILES['uploaded'.$i]['name']) ;           
            if(move_uploaded_file($_FILES['uploaded'.$i]['tmp_name'], $folder))
            {
                $upload_count ++;
            }
        }

Hurok a mellékletet:

for ($i = 0; $i <= $upload_count; $i++)
{
    $mail->AddAttachment($locatie.$_FILES['uploaded'.$i]['name'], $_FILES['uploaded'.$i]['name']);
}
Válaszolt 13/06/2011 08:55
a forrás felhasználó

szavazat
0

Nem biztos, hogy ez pontosan mit szeretne, de ez hogyan kapcsolódik több feltöltött fájlok és tartják eredeti fájlnevek egy űrlappal. Hiba kezelése / Messaging felhasználó nem ad hibát UPLOAD_ERR_NO_FILE mert fájlfeltöltéseket volt kötelező mezők, de még feldolgozza az egyes beviteli mezőbe a foreach ciklus.

foreach ($_FILES["userfile"]["error"] as $key => $error) 
    {
      if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["userfile"]["tmp_name"][$key];
        $name = $_FILES["userfile"]["name"][$key];
        $mailer->AddAttachment($tmp_name, $name);
        }

      $name = $_FILES["userfile"]["name"][$key];
      switch($error){
      case UPLOAD_ERR_INI_SIZE: echo $errmsg1.$name.$errmsg2;
break;
      case UPLOAD_ERR_FORM_SIZE: echo $errmsg1.$name.$errmsg2;
break;     
      case UPLOAD_ERR_PARTIAL:  echo $errmsg1.$name.$errmsg2; 
break;
      case UPLOAD_ERR_NO_FILE: 
      break; 
      case UPLOAD_ERR_NO_TMP_DIR: echo $errmsg1.$name.$errmsg2;
break; 
      case UPLOAD_ERR_CANT_WRITE: echo $errmsg1.$name.$errmsg2;
break;
      case UPLOAD_ERR_EXTENSION: echo $errmsg1.$name.$errmsg2;
break;
      } 
}
Válaszolt 24/01/2013 22:13
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more