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