| 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: 10 let
|
|||
0