Mam taki problem . strona po przeniesieniu z hostingu A na hosting B nie wyświetla obrazków w formacie png. Reszta działa jak należy. Gdy staram się wyświetlić obraz w png przeglądarka zwraca błąd o treści: że obraz jest uszkodzony i nie może zostać wyświetlony . Strona oparta na zend framework .Biblioteka GD również włączona . Proszę o pomoc..
- Czy system operacyjny się zmienil,
- Czy drzewo katalogowe jest takie samo, te same nazwy, tyle samo poziomów, itd.,
- Czy obrazki nie mają zmienionych uprawnień,
- Wejdź na maszynę i otwórz obrazek?
To ja zadam jeszcze jedno pytanie: czy obrazy np. jpeg są wyświetlane? Są między nimi znaczące różnice w nazwie (np. użycie wielkich liter przy png)?
strasznie dużo może się zepsuć po drodze:
- np. pliki PNG moga być generowane przez jakis skrypt PHP a brakuje jakiegos moduly PHP, generuj sie plik "durny" przegladarka zwraca blad pliku
Pierwsze co trzeba zrobić to obejrzeć co zwraca serwer HTTP w reakcji na PNG, to moze byc "nic" (pusty plik), to może byc jakiś bezsesnwony strumien danych , to może być błędny format itd .itd
Użyj F12 w Firefox albo Chrome
ccwrc napisał(a):
To ja zadam jeszcze jedno pytanie: czy obrazy np. jpeg są wyświetlane? Są między nimi znaczące różnice w nazwie (np. użycie wielkich liter przy png)?
Obrazy jpg są wyświetlane normalnie, nie ma różnic, spróbowałem zmienić rozszerzenie na pisane dyzymi literami - obraz w ogóle się nie wczytuje - ginie cały moduł na stronie. W tej chwili w miejscach gdzie są obrazy PNG są symbole zastępcze obrazka.
Marius.Maximus napisał(a):
strasznie dużo może się zepsuć po drodze:
- np. pliki PNG moga być generowane przez jakis skrypt PHP a brakuje jakiegos moduly PHP, generuj sie plik "durny" przegladarka zwraca blad pliku
Pierwsze co trzeba zrobić to obejrzeć co zwraca serwer HTTP w reakcji na PNG, to moze byc "nic" (pusty plik), to może byc jakiś bezsesnwony strumien danych , to może być błędny format itd .itd
Użyj F12 w Firefox albo Chrome
F12 pokazuje tylko prawdopodobnie wynik generowania kodu przez skrypt.
Znalazłem na forum o kogoś podobny problem i podpowiedź:
" php generuje Ci ostrzeżenia na wyjściu, w efekcie dokleja jakieś swoje teksty do wynikowego obrazka.
Dopisz sobie na końcu: header('Content-Type: text/plain', true); i skieruj przeglądarkę na adres obrazek.php - zobaczysz błędy php + krzaczki, które składają się na obrazek. wyeliminuj błędy."
Może to dobra droga, tylko że nie wiem w którym miejscu mam ten wpis z headerem żeby zobaczyć błędy...
Wciśnięcie F12 wyświetla komunikat:
(tak w adresie jest 2 razy "//") na serwerze A - działa poprawnie.
Katalogi są przeniesione 1:1, uprawnienia również.
A jak usunięsz ten dodatkowy '/ ' ręcznie?
Musisz podać więcej szczegółów. Te obrazki są na dysku i tylko je załączasz przez dodanie tagu obrazka do źródła strony, czy może generujesz je dynamicznie z kodu, a żadnych plików na dysku nie ma?
Najlepiej wklej kawałek kodu gdzie załączasz te obrazki.
jurek1980 napisał(a):
A jak usunięsz ten dodatkowy '/ ' ręcznie?
Musisz podać więcej szczegółów. Te obrazki są na dysku i tylko je załączasz przez dodanie tagu obrazka do źródła strony, czy może generujesz je dynamicznie z kodu, a żadnych plików na dysku nie ma?
Najlepiej wklej kawałek kodu gdzie załączasz te obrazki.
Adres z podwójnym // jest poprawny. Jak usunę jeden slash to zwraca mi komunikat że adres jest niepoprawny i strona nie istnieje. Obrazy są załadowane domyślnie w katalogu \assets\images w strukturze ZEND i wnioskuję że z tego katalogu są domyślnie zaczytywane. Jeżeli kolega może mi podpowiedzieć gdzie tego kodu w zend framework szukać - będę wdzięczny...
Widzę, że zend się przebrandował. Jakiej wersji używałeś, a jaka jest teraz? Skopiowane zostały wszystkie ustawienia? Nie było zmieniane ostatnim razem coś z palca?
Jak masz dostęp do źródła weź dowolną nazwę obrazka i poszukaj w kodzie, potem wklei tu ten kod.
Zakładam, że ten kod powinien generować image tag:
https://www.w3schools.com/tags/tag_img.asp
Będzie więc może coś podobnego w tym kodzie.
Zend zendem, a ktoś to mógł napisać w dziwny sposób.
jurek1980 napisał(a):
Jak masz dostęp do źródła weź dowolną nazwę obrazka i poszukaj w kodzie, potem wklei tu ten kod.
Zakładam, że ten kod powinien generować image tag:
https://www.w3schools.com/tags/tag_img.asp
Będzie więc może coś podobnego w tym kodzie.
Zend zendem, a ktoś to mógł napisać w dziwny sposób.
Jedyny plik jaki udało mi się znaleźć wskazujący na ten obraz to plik o nazwie layout.phtml.
Poniżej zamieszczam jego zawartość:
<!-- <link rel="shortcut icon" href="--><?php //echo $this->baseUrl(); ?><!--/favicon.ico">-->
<?php echo $this->headTitle(); ?>
<link rel="stylesheet" href="/assets/stylesheets/style.css">
<?php echo $this->headLink(); ?>
<script src="/assets/javascripts/modernizr.js"></script>
<!--[if lt IE 9]>
<script src="/assets/javascripts/html5shiv.js"></script>
<![endif]-->
<?php if ($this->page == 'kontakt'): ?>
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
function initialize() {
var container = document.getElementById("container");
var mapContainer = document.createElement('div');
mapContainer.id = "map";
container.parentNode.insertBefore(mapContainer, container.nextSibling);
var mapOptions = {
center: new google.maps.LatLng(51.9931223, 18.7171519),
zoom: 6
};
var map = new google.maps.Map(document.getElementById("map"), mapOptions);
var image = '/assets/images/map-marker.png';
var myLatLng = new google.maps.LatLng(27.485974, 42.745456);
var beachMarker = new google.maps.Marker({
position: myLatLng,
map: map,
icon: image
});
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
<?php endif; ?>
</head>
<body>
<?php echo $this->partial('_widgets/buttons.phtml'); ?>
- <?php foreach ($this->navigation['header'][1] as $item): ?>
-
"><?php echo $item['title']; ?>
<?php if ($item['children']): ?>
- <?php foreach ($item['children'] as $subitem): ?>
-
"><?php echo $subitem['title']; ?>
<?php if ($subitem['children']): ?>
- <?php foreach ($subitem['children'] as $subsubitem): ?>
- "><?php echo $subsubitem['title']; ?> <?php endforeach; ?>
- <?php foreach ($this->navigation['header'][2] as $item): ?>
- "><?php echo $item['title']; ?> <?php endforeach; ?>
Menu 1
<?php foreach ($this->navigation['footer'][1] as $item): ?> "><?php echo $item['title']; ?> <?php endforeach; ?> </nav> <?php endif; ?> <?php if ($this->navigation['footer'][2]): ?>
<nav class="footer-nav col col<?php echo $col; ?>">
<h2>Menu 2</h2>
<?php foreach ($this->navigation['footer'][2] as $item): ?>
<a class="footer-nav-item" href="/<?php echo $item['url_alias']; ?>"><?php echo $item['title']; ?></a>
<?php endforeach; ?>
</nav>
<?php endif; ?>
</div>
</div>
ja bym zrobil tak:
- wget http://twoja.domena.pl/twoj-plik.png
- obejrzał logi serwera http i php , ewentualnie podniosl bym poziom logowania
obejrzałem wczoraj co sie pokazuje pod F12 w firefox i dla obrazków rzeczywscie nie wiele widać jak cos nie tak z zawartosia pliku , trzeba uzyc jakiegoś alternatywnego narzedzia np. wget
pobrac plik PNG i zobaczyc co jest w środku, czy jest pusty, czy moze to tekst z bledami :)
Dregorio napisał(a):
Widzę, że zend się przebrandował. Jakiej wersji używałeś, a jaka jest teraz? Skopiowane zostały wszystkie ustawienia? Nie było zmieniane ostatnim razem coś z palca?
Nic nie zmieniałem, kopia za pomocą filezilla z serwera A na serwer B. Zmiana tylko danych dostępowych do bazy w aplication.ini . Zend to prawdopodobnie wersja 1
Marius.Maximus napisał(a):
ja bym zrobil tak:
- wget http://twoja.domena.pl/twoj-plik.png
- obejrzał logi serwera http i php , ewentualnie podniosl bym poziom logowania
obejrzałem wczoraj co sie pokazuje pod F12 w firefox i dla obrazków rzeczywscie nie wiele widać jak cos nie tak z zawartosia pliku , trzeba uzyc jakiegoś alternatywnego narzedzia np. wget
pobrac plik PNG i zobaczyc co jest w środku, czy jest pusty, czy moze to tekst z bledami :)
Pobrałem obraz za pomocą wget i pobiera się prawidłowy obraz. Czyli obrazek jest OK. Co kolega rozumie przez podniesienie poziomu logowania ?
Apllication.log: mam taki błąd:
2023-11-25T0834+01:00 ERR (3): exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (.ssh)' in /library/Zend/Controller/Dispatcher/Standard.php:248
Stack trace:
#0 /library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#1 /library/Zend/Application/Bootstrap/Bootstrap.php(101): Zend_Controller_Front->dispatch()
#2 /library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#3 /index.php(44): Zend_Application->run()
#4 {main}
2023-11-25T0835+01:00 ERR (3): exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (db_admin)' in /library/Zend/Controller/Dispatcher/Standard.php:248
Stack trace:
#0
A w PHP.log coś takiego ale z datą z 15 listopada:
[15-Nov-2023 2113 Europe/Warsaw] PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'url_alias' in 'where clause'' in /library/Zend/Db/Statement/Pdo.php:228
Stack trace:
#0 /library/Zend/Db/Statement/Pdo.php(228): PDOStatement->execute(Array)
#1 /library/Zend/Db/Statement.php(323): Zend_Db_Statement_Pdo->_execute(Array)
#2 /library/Zend/Db/Adapter/Abstract.php(480): Zend_Db_Statement->execute(Array)
#3 /library/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query(Object(Zend_Db_Table_Select), Array)
#4 /library/Zend/Db/Table/Abstract.php(1575): Zend_Db_Adapter_Pdo_Abstract->query(Object(Zend_Db_Table_Select))
#5 /library/Zend/Db/Table/Abstract.php(1437): Zend_Db_Table_Abstract->_fetch(Object(Zend_Db_Table_Select))
#6 /library/Application/Plugin/UpdateController.php(17): Zend_Db_Table_Abstract->fetchRow('url_alias = 'at...')
#7 /library/Zend/Controller/Plugin/Broker.php(309): Application_Plugin_UpdateController->preDispatch(Object(Zend_Controller_Request_Http))
#8 /library/ in /library/Zend/Controller/Plugin/Broker.php on line 312
a zgadza się rozmiar pod F12 i pobranego wget ?
Albo czy przegladarka otworzy pobrany plik przez wget ?
Rozumiem że testowane na róznych komputerach/przegladarkach ?
Marius.Maximus napisał(a):
a zgadza się rozmiar pod F12 i pobranego wget ?
Albo czy przegladarka otworzy pobrany plik przez wget ?
Rozumiem że testowane na róznych komputerach/przegladarkach ?
Tak rozmiar się zgadza ten z serwera z tym pobranym przez wget (jak sprawdzić pod F12 wielkość pliku nie mam pojęcia) . Przeglądarki bez problemu otwierają plik pobrany za pomocą wget. Tak testowałem na różnych komputerach i przeglądarkach.
Tak się zastanawiam czy czasem ne jest przyczyną to że póki co pracuję na kopii witryny którą uruchomiłem w obrębie subdomeny. Być może skrypty wskazują na adres bezpośredni i po prostu nie mają do tych PNG dostępu ? Dopiero w momencie jak podepnę właściwą domenę ruszy ?
To tak moja dygresja bo nie wiem czego się chwytać....
Ale ten wget robisz do http://mojasubdomena/asset/obrazek.png
?
Jeśli tak to nie to.
Masz tam coś takiego jak Apache jako webserver i jakieś pliki typu .htaccess
?
jurek1980 napisał(a):
Ale ten wget robisz do
http://mojasubdomena/asset/obrazek.png
?
Jeśli tak to nie to.
Masz tam coś takiego jak Apache jako webserver i jakieś pliki typu.htaccess
?
Tak mam. Poniżej podaję cały htaccess:
Header set X-UA-Compatible "IE=Edge,chrome=1"
# mod_headers can't match by content-type, but we don't want to send this header on *everything*...
<FilesMatch "\.(js|css|gif|png|jpe?g|JPG|pdf|xml|oga|ogg|m4a|ogv|mp4|m4v|webm|svg|svgz|eot|ttf|otf|woff|ico|webp|appcache|manifest|htc|crx|oex|xpi|safariextz|vcf)$" >
Header unset X-UA-Compatible
</FilesMatch>
</IfModule>
AddType application/javascript js
# Audio
AddType audio/ogg oga ogg
AddType audio/mp4 m4a
# Video
AddType video/ogg ogv
AddType video/mp4 mp4 m4v
AddType video/webm webm
# SVG
# Required for svg webfonts on iPad
# twitter.com/FontSquirrel/status/1433433444
AddType image/svg+xml svg svgz
AddEncoding gzip svgz png
# Webfonts
AddType application/vnd.ms-fontobject eot
AddType application/x-font-ttf ttf ttc
AddType font/opentype otf
AddType application/x-font-woff woff
# Assorted types
AddType image/x-icon ico
AddType image/webp webp
AddType text/cache-manifest appcache manifest
AddType text/x-component htc
AddType application/x-chrome-extension crx
AddType application/x-opera-extension oex
AddType application/x-xpinstall xpi
AddType application/octet-stream safariextz
AddType application/x-web-app-manifest+json webapp
AddType text/x-vcard vcf
<IfModule mod_deflate.c>
# Force deflate for mangled headers developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping/
<IfModule mod_setenvif.c>
<IfModule mod_headers.c>
SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
</IfModule>
</IfModule>
# HTML, TXT, CSS, JavaScript, JSON, XML, HTC:
<IfModule filter_module>
FilterDeclare COMPRESS
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/html
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/css
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/plain
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/x-component
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/javascript
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/json
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xhtml+xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/rss+xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/atom+xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/vnd.ms-fontobject
FilterProvider COMPRESS DEFLATE resp=Content-Type $image/svg+xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $image/x-icon
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/x-font-ttf
FilterProvider COMPRESS DEFLATE resp=Content-Type $font/opentype
FilterChain COMPRESS
FilterProtocol COMPRESS DEFLATE change=yes;byteranges=no
</IfModule>
<IfModule !mod_filter.c>
# Legacy versions of Apache
AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE text/xml application/xml text/x-component
AddOutputFilterByType DEFLATE application/xhtml+xml application/rss+xml application/atom+xml
AddOutputFilterByType DEFLATE image/x-icon image/svg+xml application/vnd.ms-fontobject application/x-font-ttf font/opentype
</IfModule>
</IfModule>
<IfModule mod_expires.c>
ExpiresActive on
# Perhaps better to whitelist expires rules? Perhaps.
ExpiresDefault "access plus 1 month"
# cache.appcache needs re-requests in FF 3.6 (thanks Remy ~Introducing HTML5)
ExpiresByType text/cache-manifest "access plus 0 seconds"
# Your document html
ExpiresByType text/html "access plus 0 seconds"
# Data
ExpiresByType text/xml "access plus 0 seconds"
ExpiresByType application/xml "access plus 0 seconds"
ExpiresByType application/json "access plus 0 seconds"
# Feed
ExpiresByType application/rss+xml "access plus 1 hour"
ExpiresByType application/atom+xml "access plus 1 hour"
# Favicon (cannot be renamed)
ExpiresByType image/x-icon "access plus 1 week"
# Media: images, video, audio
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType video/ogg "access plus 1 month"
ExpiresByType audio/ogg "access plus 1 month"
ExpiresByType video/mp4 "access plus 1 month"
ExpiresByType video/webm "access plus 1 month"
# HTC files (css3pie)
ExpiresByType text/x-component "access plus 1 month"
# Webfonts
ExpiresByType application/x-font-ttf "access plus 1 month"
ExpiresByType font/opentype "access plus 1 month"
ExpiresByType application/x-font-woff "access plus 1 month"
ExpiresByType image/svg+xml "access plus 1 month"
ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
# CSS and JavaScript
ExpiresByType text/css "access plus 1 year"
ExpiresByType application/javascript "access plus 1 year"
</IfModule>
# FileETag None is not enough for every server.
<IfModule mod_headers.c>
Header unset ETag
</IfModule>
# Since we're sending far-future expires, we don't need ETags for
# static content.
# developer.yahoo.com/performance/rules.html#etags
FileETag None
Options +Indexes +MultiViews +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule !.(js|css|ico|gif|jpg|JPG|png|swf|txt|xml|html|php|pdf|zip|woff|ttf|svg|eot)$ index.php
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
# Use UTF-8 encoding for anything served text/plain or text/html
AddDefaultCharset utf-8
# Force UTF-8 for a number of file formats
AddCharset utf-8 .css .js .xml .json .rss .atom
<IfModule php5_module>
php_value session.cookie_httponly true
</IfModule>
jurek1980 napisał(a):
Ale ten wget robisz do
http://mojasubdomena/asset/obrazek.png
?
Jeśli tak to nie to.
Masz tam coś takiego jak Apache jako webserver i jakieś pliki typu.htaccess
?
Tak wget robiłem dla obrazka który się nie wczytuje bezpośrednio
AddEncoding gzip png
może być problemem. Sprawdzałem dla “jpeg”, ale może być podobnie.
overcq napisał(a):
AddEncoding gzip png
może być problemem. Sprawdzałem dla “jpeg”, ale może być podobnie.
To było to!!
Bardzo bardzo dziękuję -po zahaszowaniu tej linii wszystko elegancko się wczytało i nie ma błędów. Jeszcze raz bardzo mocno dziękuję :)
Jakkolwiek
AddEncoding gzip svgz
ma sens. :)