Autor | Zpráva | ||
---|---|---|---|
Vilak Profil |
#1 · Zasláno: 13. 11. 2016, 23:03:37
Zdravím. Mám skript na nahrávání fotek, kteýr mi na localhostu jde a na wedosu ne. Nahrávám fotky, které mají třeba i 8 MB a musím je předělávat na určitou velikost, takže je tam nutné (většinou) jejich zmenšení.
Web mi vypisuje tuto chybu: Warning: set_time_limit() has been disabled for security reasons in /data/web/virtuals/138112/virtual/www/include/scripts/gallery.php on line 3 string(47) "/data/web/virtuals/138112/virtual/tmp/php9UgwVH" string(26) "Sbh C360 MU16081607590.jpg" Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 37416 bytes) in /data/web/virtuals/138112/virtual/www/include/scripts/gallery.php on line 82 Jen chci dodat, že některé věci jsou ve skriptu zbytečné, protože jsem trošku experimentoval a nevěděl jsem, jak udělat nahrávání fotek a jejich následné zmenšení. skript: <?php if (isset($_POST['add_photo'])) { set_time_limit(1200); // ŘÁDEK 3 if (!file_exists("../../galerie")) { mkdir("../../galerie", 0777); } if (!file_exists("../../miniatury")) { mkdir("../../miniatury", 0777); } $upload_dir = "../../galerie/"; $suffix = array("jpg", "jpeg", "png", "gif", "ico", "JPG", "JPEG"); $message = ""; include "../prevodni-tabulka.php"; include "../db/db.php"; if (isset($_FILES['images']) && is_array($_FILES['images']['name'])) { $counter = 0; $rank = ""; $not_uploaded = 0; $filenames = []; $filenames1 = []; $add_message = 1; $add_message1 = 1; $suffix = array_flip($suffix); $url_img = $_SERVER['SERVER_NAME']; foreach ($_FILES['images']['name'] as $key => $name) { $filename = basename($name); $tmpname = $_FILES['images']['tmp_name'][$counter]; var_dump($tmpname, $filename)."<br>"; $stmt = $conn->prepare("SELECT * FROM `images` ORDER BY `id` DESC"); $stmt->execute(); $result = $stmt->fetch(PDO::FETCH_ASSOC); $lastid = $result['id']; $stmt = $conn->prepare("SELECT * FROM `images`"); $stmt->execute(); $rank = $stmt->rowCount(); $rank = $lastid+100; if ($_FILES['images']['error'] == UPLOAD_ERR_NO_FILE) { $message .= "Nevybrali jste fotky, které chcete nahrát.<br>"; header("Location: ../../galerie.php?message=$message"); } if (!$_FILES || $_FILES['images']['error'] == UPLOAD_ERR_INI_SIZE) { $not_uploaded++; $sum = $counter + $not_uploaded; if ($sum == sizeof($_FILES['images']['name'])) { $message .= "Soubor je příliš velký, maximální velikost souboru je " . ini_get('upload_max_filesize') . ".<br>"; } continue; } if (!is_uploaded_file($tmpname) || !isset($suffix[strtolower(pathinfo($filename, PATHINFO_EXTENSION))])) { $not_uploaded++; $sum = $counter + $not_uploaded; if ($sum == sizeof($_FILES['images']['name'])) { $message .= "Některé soubory obsahují nepovolenou koncovku. Povolené jsou pouze .jpg, .jpeg, .png, .gif a .ico. "; } continue; } $filename = rand(1000, 9999)."-".rand(10, 99)."-".$filename; if (move_uploaded_file($tmpname, "{$upload_dir}".DIRECTORY_SEPARATOR."{$filename}")) { $stmt = $conn->prepare("INSERT INTO `images` (`name`, `alt`, `rank`) VALUES (?, ?, ?)"); $stmt->execute(array( $filename, $filename, $rank )); $counter++; ini_set('memory_limit', '-1'); // získání rozměrů původního obrázku $rozmery = getimagesize ("../../galerie/".$filename); // vypočítá poměr stran původního obrázku $pomer = $rozmery[0]/$rozmery[1]; // načtení původního obrázku $puvodni_obraz = imagecreatefromjpeg("../../galerie/".$filename); // řádek 82 // vytvoření nového true color (asi tak 16 milionů barev) obrázku se zadanou šířkou, výška se dopočítá $novy_obraz = imagecreatetruecolor (1024, 1024/$pomer); // kopírování původního obrázku do nového se zadanou šířkou imagecopyresampled ($novy_obraz, $puvodni_obraz, 0, 0, 0, 0, 1024, 1024/$pomer, $rozmery[0], $rozmery[1]); // odešle prohlížeči vygenerovaný obrázek. imagejpeg ($novy_obraz, "../../galerie/".$filename); // Uvolní systémové prostředky. imagedestroy ($novy_obraz); imagedestroy ($puvodni_obraz); } } $message .= "Bylo nahráno {$counter} z ".sizeof($_FILES['images']['name'])." obrázků."; header("location: ../../galerie.php?message=$message"); } } ?> Jak to udělat, aby to šlo? Při menších fotkách to funguje, jen nevím, jak pracovat s tak velkýma fotkama. |
||
Taps Profil |
#2 · Zasláno: 13. 11. 2016, 23:15:31
Funkce set_time_limit je z bezoecnostnich duvodu na hostingu zakazana
|
||
Vilak Profil |
#3 · Zasláno: 13. 11. 2016, 23:20:39
To jsem z textu celkem pochopil, ale jak vyřešit problém s nahráváním a upravováním velkých fotek? Jde to nějak?
|
||
pcmanik Profil |
Vilak:
Skús použiť ImageMagick, ten sa narozdiel od GD nezapočítava do PHP memory limitu. |
||
Časová prodleva: 8 let
|
0