Skocz do zawartości

[php] dziwny problem z nazwami plików


axekd

Rekomendowane odpowiedzi

Mam taki nietypowy problem.

Mam pliki o dziwnych nazwach:

np.: dane_ms_9%2F0%2FOMS_1.jpg

I teraz mam taki kod:

<?php
$z1="https://www.mojastrona.pl/folder/foto/dane_ms_9%2F0%2FOMS_1.jpg";
$z2="foto/dane_ms_9%2F0%2FOMS_1.jpg";

if (file_exists($z1)) echo "T<br>"; else echo "N<br>";
if (file_exists($z2)) echo "T<br>"; else echo "N<br>";

echo "<img src='$z1'><br><br>";
echo "<img src='$z2'><br><br>";
?>

Kod ten powoduje pokazanie się

N

T

2 nieodczytane obrazki.

Znaczy to, że z pełną ścieżką php nie rozpoznał istnienia pliku.

Ze ścieżką zaczynającą się of "foto/" pokazuje, że taki plik istnieje.

Ale jak chcę wyświetlić obrazek w jakikolwiek sposób to nie potrafi go wyświetlić na stronie.

Po kliknięciu w przeglądarce na "właściwości obrazka" adresy tych dwóch są identyczne".

O co chodzi z tym plikiem? Robiłemjuz testy i wiem, że przeglądarka nie wyświetla obrazka który sie nazywa np. "8%.jpg", czy można cos na to zaradzić?

Z góry dzięki.

Odnośnik do komentarza
Udostępnij na innych stronach

Użyj tej funkcji:

<?php
  function url_exists($url) {
   $a_url = parse_url($url);
   if (!isset($a_url['port'])) $a_url['port'] = 80;
   $errno = 0;
   $errstr = '';
   $timeout = 30;
   if(isset($a_url['host']) && $a_url['host']!=gethostbyname($a_url['host'])){
	   $fid = fsockopen($a_url['host'], $a_url['port'], $errno, $errstr, $timeout);
	   if (!$fid) return false;
	   $page = isset($a_url['path'])  ?$a_url['path']:'';
	   $page .= isset($a_url['query'])?'?'.$a_url['query']:'';
	   fputs($fid, 'HEAD '.$page.' HTTP/1.0'."\r\n".'Host: '.$a_url['host']."\r\n\r\n");
	   $head = fread($fid, 4096);
	   $head = substr($head,0,strpos($head, 'Connection: close'));
	   fclose($fid);
	   if (preg_match('#^HTTP/.*\s+[200|302]+\s#i', $head)) {
		$pos = strpos($head, 'Content-Type');
		return $pos !== false;
	   }
   } else {
	   return false;
   }
  }   
?>

lub

<?php
function url_exists($url){
if(strstr($url, "https://")) $url = str_replace("https://", "", $url);
$fp = @fsockopen($url, 80);
if($fp === false) return false;
return true;
}
?>

logo-stat4seo-blue-small.png

Odnośnik do komentarza
Udostępnij na innych stronach

Dzięki za funkcję.

Mi jednak chodziło bardziej o 2 część pytania.

Jak wyświetlić taki obrazek w przeglądarce.

Bo:

https://web.iq.pl/1.jpg

wyświetla obrazek, a:

https://web.iq.pl/1%.jpg

nie umie wyświetlić obrazka.

Oczywiście pliki 1.jpg i 1%.jpg są tam wrzucone.

To chyba jest problem apache'a...

Odnośnik do komentarza
Udostępnij na innych stronach

Powinno działać:

$z1 = "https://www.mojastrona.pl/folder/foto/dane_ms_9%2F0%2FOMS_1.jpg";
$z2 = "foto/dane_ms_9%2F0%2FOMS_1.jpg";

$z1 = str_replace('%', '%25', $z1);
$z2 = str_replace('%', '%25', $z2);

echo "<img src='$z1'><br><br>";
echo "<img src='$z2'><br><br>";

Nie stosuj znaku '%' przy nadawaniu nazw plikom, ponieważ służy on jako znak specjalny przy kodowaniu urla-a, stąd kłopoty. https://en.wikipedia.org/wiki/Percent-encoding

and

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności