Autor | Zpráva | ||
---|---|---|---|
LExtR Profil |
#1 · Zasláno: 14. 6. 2016, 04:52:41
Zdravím,
mám tu upload obrázku společně s vkládáním dat do mysql formulářem. Potřeboval jsem aby se přejmenovali obrázky pokud existují stejné názvy. Jenže teď mi nechce move_uploaded_file() nový název. 1) Warning: move_uploaded_file(): The second argument to copy() function cannot be a directory in /home/xxx/public_html/add.php on line 45 2) Warning: move_uploaded_file(): Unable to move '/tmp/phpJPVaO2' to 'backgrounds/' in /home/xxx/public_html/add.php on line 45 Kód: include "conn.php"; $conn = new mysqli($dbserver, $dbuser, $dbpw, $dbname); if ($conn->connect_error) { die("Chyba připojení: " . $conn->connect_error); } if(isset($_FILES['image'])){ $file_name = $_FILES['image']['name']; $file_size =$_FILES['image']['size']; $file_tmp =$_FILES['image']['tmp_name']; $file_type=$_FILES['image']['type']; $name=$_POST['name']; $codes=$_POST['code']; $actual_name = pathinfo($file_name,PATHINFO_FILENAME); $original_name = $actual_name; $extension = pathinfo($file_name, PATHINFO_EXTENSION); $i = 1; while(file_exists('backgrounds/'.$actual_name.".".$extension)) { $actual_name = (string)$original_name.$i; $name = $actual_name.".".$extension; $i++; } $extensions = array("jpeg","jpg","png"); $file_ext=explode('.',$_FILES['image']['name']) ; $file_ext=end($file_ext); if(in_array($file_ext,$extensions)=== false){ $errors[]="povolené jsou pouze formáty JPG, JPEG a PNG"; } if($file_size > 2097152){ $errors[]='Obrázek nesmí být větší jak 2 MB'; } if(empty($errors)==true){ move_uploaded_file($file_tmp,"backgrounds/".$name); }else{ print_r($errors); } if(isset($_POST["pridat"])){ $sql = "INSERT INTO quotes (author, quote, bg) VALUES ('". addslashes($_POST["author"]) ."','". addslashes($_POST["quote"]) ."','". addslashes($name) ."')"; if ($conn->query($sql) === TRUE) { echo "<script> window.setTimeout(function() { window.location = 'http://q/'; }, 5000); </script> <div class='alert alert-success'> <strong>Výborně!</strong> Citát byl odeslán ke zpracování. </div>"; } else { echo "Chyba: " . $conn->error; } } } |
||
juriad Profil |
#2 · Zasláno: 14. 6. 2016, 10:55:41
V případě, že kolize nenastala, tak se while neprovede ani jednou. Tedy $name bude pořád to definované na řádce 14 (které tam asi nemá co dělat). Pokud by POST['name'] bylo prázdné, tak se opravdu na řádce 43 pokusíš přesunout soubor do
"backgrounds/" . Warning ti říká, že cílové umístění musí být název souboru a nikoli adresáře.
Miochodem, silně ti doporučuji to přeuspořádat nebo rozdělit do funkcí, protože se ti tu plete hromada proměnných dohromady a netušíš, co která obsahuje. |
||
juriad Profil |
#3 · Zasláno: 14. 6. 2016, 12:07:30
Návrh řešení; netestováno, neobsahuje syntaktické chyby.
<?php function checkSize($file, &$errors) { $return = TRUE; # file size $size = $_FILES[$file]['size']; if ($size > 2 * 1024 * 1024){ $errors[] = 'Obrázek nesmí být větší jak 2 MB'; $return = FALSE; } return $return; } function checkType($file, &$errors) { $return = TRUE; # check extension $extensions = array("jpeg", "jpg", "png"); $extension = strtolower(pathinfo($_FILES[$file]['name'], PATHINFO_EXTENSION)); if (!in_array($extension, $extensions)) { $errors[] = 'Povolené jsou pouze přípony JPG, JPEG a PNG'; $return = FALSE; } # check mime type $type = $_FILES[$file]['type']; if (strpos($type, 'image/') !== 0) { $errors[] = 'Povolené jsou pouze soubory obsahující obrázek'; $return = FALSE; } return $return; } function globEscape($pattern) { return preg_replace('/[*?[\\]/', '[$0]', $pattern); } function getName($file, $destination, &$errors) { $fullname = $_FILES[$file]['name']; $fullname = str_replace(["\0", "/"], ["", "_"], $fullname); $filename = pathinfo($fullname, PATHINFO_FILENAME); # we replace . to reliably recognize an extension $filename = str_replace('.', '_', $filename); if (strlen($filename) == 0) { $filename = 'soubor'; } $extension = strtolower(pathinfo($fullname, PATHINFO_EXTENSION)); # do not trust that the programmer called checkType first if (strlen($extension) == 0) { $extension = 'ext'; } # now we are sure that $filename.$extension is a valid name of the desired format if (!file_exists("$destination/$filename.$extension")) { $name = "$filename.$extension"; } else { # glob search for all files with such name $dest = globEscape($destination); $fname = globEscape($filename); $ext = globEscape($extension); $files = glob("$dest/$fname.*.$ext", GLOB_NOSORT); # count number of such files and add 1 $i = !$files ? 1 : count($files) + 1; $name = "$filename.$i.$extension"; } return $name; } $destination = 'backgrounds'; if (isset($_FILES['image'])) { checkSize('image', $errors); checkType('image', $errors); $name = getName('image', $destination, $errors); if (empty($errors)) { move_uploaded_file($FILES['image']['tmp_name'], "$destination/$name"); } } else { print_r($errors); } |
||
Časová prodleva: 8 let
|
0