Uszkodzony obraz PNG po przeniesieniu aplikacji na inny hosting

0

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..

1
  1. Czy system operacyjny się zmienil,
  2. Czy drzewo katalogowe jest takie samo, te same nazwy, tyle samo poziomów, itd.,
  3. Czy obrazki nie mają zmienionych uprawnień,
  4. Wejdź na maszynę i otwórz obrazek?
0

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)?

0

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

0
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.

0
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: Obraz „http://mojadomena/assets/images//obraz.png” nie może zostać wyświetlony, ponieważ zawiera błędy.
(tak w adresie jest 2 razy "//") na serwerze A - działa poprawnie.
Katalogi są przeniesione 1:1, uprawnienia również.

0

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.

0
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...

0

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?

0

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.

0
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ść:

<?php echo $this->doctype(); ?> <head> <meta charset="UTF-8">
<!--    <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'); ?>
<header id="header" class="clearfix"> <?php echo $this->image('obraz-ktory-nie-dziala.png', '', array('title' => 'Strona główna', 'alt' => "STRONA GŁÓWNA")); ?> <?php if ($this->navigation): ?> <nav id="topNav"> <?php if ($this->navigation['header'][2]): ?> <?php endif; ?> </nav> <?php endif; ?> </header> <?php echo $this->layout()->content; ?>

Kontakt

Adres:ul. testowa, 12-345 Test
nr tel:123 456 789
<?php $col = count($this->navigation['footer']) == 1 ? 6 : 3; ?> <?php if ($this->navigation['footer'][1]): ?> <nav class="footer-nav col col&lt;?php echo $col; ?">">

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>
<?php echo $this->headScript(); ?> <script> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-50095017-2', 'auto'); ga('send', 'pageview'); </script> </body> </html>
0

ja bym zrobil tak:

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 :)

0
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

0
Marius.Maximus napisał(a):

ja bym zrobil tak:

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

0

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 ?

0
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ć....

0

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 ?

0
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>



0
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

2
AddEncoding gzip png

może być problemem. Sprawdzałem dla “jpeg”, ale może być podobnie.

0
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ę :)

0

Jakkolwiek

AddEncoding gzip svgz

ma sens. :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1