• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Obrazki ze spacją w nazwie nie są poprawnie wysyłane na serwer

VPS Starter Arubacloud
0 głosów
301 wizyt
pytanie zadane 21 września 2018 w PHP przez Q7V Gaduła (4,250 p.)

Cześć, mam taki kodzik w PHP, jest to część większego skryptu, ale ta część jest odpowiedzialna za przesył obrazka na serwer. Pliki które mają spacje w nazwie nie są wysyłane na serwer, wysyła się tylko ta część do spacji np. screen from friday wysyła się jako screen.

<?php
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
    echo "File is an image - " . $check["mime"] . ".";
    $uploadOk = 1;
} else {
    echo "File is not an image.";
    $uploadOk = 0;
}
// Check if file already exists
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
    echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
} else {
    echo "Sorry, there was an error uploading your file.";
}
}

 

2 odpowiedzi

+1 głos
odpowiedź 21 września 2018 przez OdsetekGlupoty Pasjonat (15,360 p.)

Witam,

Najlepszym rozwiązaniem byłaby zamiana spacji na _ (lub jakiś inny znak) używając str_replace.

komentarz 21 września 2018 przez Q7V Gaduła (4,250 p.)
Dzięki, ale jak to zastosować nie niszcząc logiki kodu? Bo jak dam to dla zmiennej $_FILES["fileToUpload"]["size"] to mi się nie wykrzaczy?
komentarz 22 września 2018 przez OdsetekGlupoty Pasjonat (15,360 p.)
A dlaczego dla "size"? Po prostu edytujesz nazwę pliku a potem wszystkie operacje wykonujesz na pliku ze zmienioną nazwą.
komentarz 22 września 2018 przez Q7V Gaduła (4,250 p.)
Sorki, miało być "name" :P
0 głosów
odpowiedź 21 września 2018 przez Muhin Gaduła (4,120 p.)

Według php.net nie powinno się stosować funkcji getimagesize() do sprawdzania czy plik jest obrazkiem.

http://php.net/manual/en/function.getimagesize.php

Spróbuj z czymś takim:

if (move_uploaded_file($target_file, $_FILES["fileToUpload"]["tmp_name"])) {
    echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
} else {
    echo "Sorry, there was an error uploading your file.";
}

//edit

Jednak to masz dobrze. W dokumentacji podali to w odwrotnej kolejności i mnie to zmyliło.

Pokaż co trzymasz w zmiennej $target_file

komentarz 22 września 2018 przez Q7V Gaduła (4,250 p.)
array(8) { ["day"]=> string(10) "22/09/2018" [0]=> string(10) "22/09/2018" ["title"]=> string(3) "ddd" [1]=> string(3) "ddd" ["post"]=> string(1) "d" [2]=> string(1) "d" ["url"]=> string(39) "Screenshot from 2018-09-17 19-53-33.png" [3]=> string(39) "Screenshot from 2018-09-17 19-53-33.png" } 

 

komentarz 22 września 2018 przez Muhin Gaduła (4,120 p.)
No to musisz szukać czegoś w tym Twoim kodzie którym generujesz te tagi, bo jak i z bazy jak i do bazy ewidentnie trafia cały path Twojego obrazka. Możesz jeszcze pokazać CAŁY kod którym to wyciągasz/generujesz. Może uda się tam coś zobaczyć.
komentarz 22 września 2018 przez Q7V Gaduła (4,250 p.)

No niby wygląda wszystko OK.

Tutaj wyciągam obrazki z bazy, pliki bez spacji zaciągają się prawidłowo. Te ze spacją niszczą cały znacznik <img>

        try {
            require 'php/db_login.php';
            $dbh  = new PDO("mysql:host={$where};dbname={$db}", $username, $passworddb);
            $post = $dbh->prepare("SELECT day,title,post,url FROM choco_posts GROUP BY id DESC");
            $post->execute();
            $result = $post->fetchAll();
            foreach ($result as $row) {
              if(!is_null($row['url'])){
                $img = "img/".$row['url'];
                $imgpath = '<img class="imgpost" src='.$img.'><br /><br />';
              }
                else $imgpath = "";
                echo '<h2 class="center">'.$row['title'].'</h2><p class="date">'.$row['day'].'</p>'.$imgpath.$row['post'] . '<br /> '.var_dump($row).'';
            }
            $dbh = null;
        }

 

komentarz 22 września 2018 przez Muhin Gaduła (4,120 p.)

Racja.

Wcześniej nie zwróciłem na to uwagi.

Spróbuj tak:

$imgpath = '<img class="imgpost" src="{$img}"><br /><br />';

 

komentarz 22 września 2018 przez Q7V Gaduła (4,250 p.)

Jeju kochany, bóg zapłać dobry człowieku! To jest to!!! heart

Jedynie odwrotnie cudzysłowia. Pojedyńcze w podwójnych zamiast odwrotnie, ale to edytor mi podświetlił.

Jeszcze raz wielkie dzięki za pomoc, bo nie doszedłbym do tego nigdy.

Podobne pytania

+1 głos
1 odpowiedź 177 wizyt
pytanie zadane 11 lutego 2022 w PHP przez ZnaQu Nowicjusz (130 p.)
0 głosów
0 odpowiedzi 109 wizyt
pytanie zadane 12 maja 2019 w PHP przez r.mar Początkujący (470 p.)
0 głosów
1 odpowiedź 1,431 wizyt
pytanie zadane 7 października 2017 w PHP przez BlackCat_ Początkujący (310 p.)

92,454 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...