Autor Zpráva
chudst
Profil
Ahoj,
snažím se vyřešit problém s nahrávanými soubory. Hosting u wedosu totiž podporuje maximálně 20 nahraných souborů zároveň (kvůli max_file_uploads). Mám skriptík, který mi v pohodě funguje, ale bohužel je omezený právě hodnotou max_file_uploads, která se u wedosu nedá změnit.

Nicméně když jsem použil plugin od Uploadify (www.uploadify.com), vše funguje (nevím, na jakém principu). Tam ale zase nevím, jak mám doplnit různá ošetření (např. aby soubor byl opravdu typu obrázek a neprošla jen přípona, aby název souboru byl v databázi, atp.) a aby se zobrazily dané chyby.

Potýkal se s tímto už někdo, prosím? Dá se obejít max_file_uploads (jako to udělalo uploadify)?

Díky moc!
Keeehi
Profil
chudst:
Uploadify ty soubory posílá postupně. Takže místo 30ti souborů v jednom požadavku pošleš 30x požadavek, pokaždé s jedním souborem. Samozřejmě můžeš poslat jeden s dvaceti a druhý s deseti.
chudst
Profil
Děkuji Keeehi, přiznám se, že tady už to začíná být nad mé síly, mohl bych poprosit o další nakopnutí?

Zatím to řeším takto: pokud uživatel klikne na "odeslat", mám ve $_FILES['soubory']['name'] uloženy názvy souborů. Ty přes foreeach vyprázdním, resp. uploadnu na web. Bohužel, do $_FILES['soubory']['name'] se vloží jen 20 souborů. (Skriptík byl zjednodušen o podmínky.)

<?php
if(isset($_POST['Upload_souboru']) and $_SERVER['REQUEST_METHOD'] == "POST"){

  echo count($_FILES['soubory']['name']); // Pro ověření výpis: když nahraji více než 20 souborů, pořád zde jich mám uloženo 20.
 
  $cilovy_adresar = "upload/";  
  foreach ($_FILES['soubory']['name'] as $cislo_souboru => $nazev_souboru) {
    $soubor = $_FILES["soubory"]["tmp_name"][$cislo_souboru];
    if (mime_content_type($soubor) != 'image/png' && mime_content_type($soubor) != 'image/jpeg')
      { $hlaska[] = 'Soubor s názvem '.$nazev_souboru.' není ve formátu JPG / PNG!'; continue; }
    else
      { if(move_uploaded_file($soubor, $cilovy_adresar.$nazev_souboru)) {$pocet_nahranych_souboru++;}}
  }
}

// Pokud byly soubory v pořádku nahrány
if($pocet_nahranych_souboru != 0){echo 'Vaše soubory ('.$pocet_nahranych_souboru.' ) byly v pořádku nahrány na stránky.';}

// Pokud nastaly chyby, vypíší se
if (isset($hlaska)) {foreach ($hlaska as $zobrazit_hlasku) {echo '- '.$zobrazit_hlasku.'<br />';}}
?>

<form action="" method="post" enctype="multipart/form-data">
      <input type="file" name="soubory[]" multiple="multiple" accept="image/*">
      <input type="submit" name="Upload_souboru" value="Nahrát soubor na stránky">
</form>   

Jakpak bych měl tedy nastavit $_FILES['soubory']['name'], aby jich pojalo více? Tedy - spíše jak mám tento požadavek poslat vícekrát?
Keeehi
Profil
To musíš zařídit už v prohlížeči uživatele. Prohlížeč musí poslat více požadavků, v PHP je na to už pozdě.

Toto je první řešení, co jsem našel. Není úplně ideální, dalo by se určitě napsat lépe, ale na začátek by ti to mohlo stačit. Živá ukázka

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: