2015-02-13 2 views
0

У меня проблема с моими автоматическими генерирующими изображениями.Медленная загрузка с большим количеством генерируемых PHP изображений

У меня есть PHP-скрипт, который получает URL-адрес изображения и генерирует это изображение в запрошенных размерах и модификациях по параметру «m» в URL-адресе. Он может изменять размеры и прочее.

С одной или нескольких фотографий, это здорово - как: http://www.jaarda.eu/upload/pluginGallery/129b12182490d9e191b3a7cdd4fcf704?m=wh_400-400

Но в большом количестве, у меня есть проблемы с не загружая некоторые элементы. Проверьте на http://www.jaarda.eu/.

Я не думаю, что это проблема сервера, процессоры не идут на максимум и память тоже. Скрипт, который генерирует изображения, даже отправляет заголовки кеша, но все равно никаких изменений - на странице с большим количеством изображений, таких как jaarda.eu, является проблема. Создание других размеров изображения происходит не каждый раз, когда возникает сценарий - изображение генерируется только один раз, а затем сохраняется на сервере для повторного использования. Я даже пытаюсь многократно увеличить мощность моего VPS и без изменений.

Эта проблема не показывает в Safari, только IE, Chrome, и т.д ...

Это конец моего сценария, где функционирует кэширование и тип отправки:

$modified = filemtime($file); 
      if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) { 
       $request_modified = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']); 
       if ($modified <= $request_modified) { 
        //header('HTTP/1.1 304 Not Modified'); 
        header('HTTP/1.1 304 Not Modified', true, 304); 
       } 
      }   
      header("Last-Modified: ".gmdate('D, d M Y H:i:s', $modified)." GMT"); 
      header("Cache-Control: public, max-age=7200"); 
      header("Expires: " . gmdate('D, d M Y H:i:s', time()+7200) . ' GMT');   
      header('Content-Length: ' . filesize($file)); 
      header('Content-Type: '.$type); 
      readfile($file); 

Спасибо вам много для идей, как решить эту проблему.

EDIT

меня улучшить мою ситуацию, использовать функции ob_ в моем коде, но это не является совершенным до сих пор. Лучше, только одно из двух изображений не загружается, но все же не идеально. Проблема остается в хром с перезагрузкой ctrl + f5, поэтому спасибо за любую идею.

$modified = filemtime($file); 
     ob_start(""); 
     if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) { 
      $request_modified = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']); 
      if ($modified <= $request_modified) { 
       //header('HTTP/1.1 304 Not Modified'); 
       header('HTTP/1.1 304 Not Modified', true, 304); 
      } 
     }   
     header("Last-Modified: ".gmdate('D, d M Y H:i:s', $modified)." GMT"); 
     header("Cache-Control: public, max-age=7200"); 
     header("Expires: " . gmdate('D, d M Y H:i:s', time()+7200) . ' GMT');   
     header('Content-Length: ' . filesize($file)); 
     header('Content-Type: '.$type); 
     ob_end_clean(); 
     ob_clean(); 
     flush(); 
     readfile($file); 
     exit(); 
+0

Вы можете оставить изменение размера кода –

ответ

0

Я получаю ошибку из моей консоли: Resource интерпретируется как изображение, но передается с MIME типа текст/html

Таким образом, вопрос, где же ваш переменный $ типа взялся? Попробуйте отладить то, что вы отправили, я считаю, что вы отправляете что-то неправильно, что дает задержку в браузере.

+0

Спасибо за реакцию, но это не проблема со мной. Я сохранил MIME-тип каждого изображения в базе данных, и это значение, которое у меня есть в $ type. И моя консоль в сети пишет правый образ/тип jpeg, поэтому я думаю, что это правильно, и проблема в другом месте. – czLukasss

1

Вы должны добавить проверку размера для m=wh_400-400, потому что я попробовал другие размеры, такие как wh=3000-3000, и это сработало, и вы знаете, что это означает, если вы храните эти изображения.

Чтобы ответить на ваш вопрос, вы должны попробовать с Htaccess:

# BEGIN Expire headers 
<IfModule mod_expires.c> 
    ExpiresActive On 
    ExpiresDefault "access plus 7200 seconds" 
    ExpiresByType image/jpg "access plus 2592000 seconds" 
    ExpiresByType image/jpeg "access plus 2592000 seconds" 
    ExpiresByType image/png "access plus 2592000 seconds" 
    ExpiresByType image/gif "access plus 2592000 seconds" 
    AddType image/x-icon .ico 
    ExpiresByType image/ico "access plus 2592000 seconds" 
    ExpiresByType image/icon "access plus 2592000 seconds" 
    ExpiresByType image/x-icon "access plus 2592000 seconds" 
    ExpiresByType text/css "access plus 2592000 seconds" 
    ExpiresByType text/javascript "access plus 2592000 seconds" 
    ExpiresByType text/html "access plus 7200 seconds" 
    ExpiresByType application/xhtml+xml "access plus 7200 seconds" 
    ExpiresByType application/javascript A259200 
    ExpiresByType application/x-javascript "access plus 2592000 seconds" 
    ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds" 
</IfModule> 
# END Expire headers 

# BEGIN Cache-Control Headers 
<IfModule mod_headers.c> 
    <FilesMatch "\\.(ico|jpe?g|png|gif|swf|gz|ttf)$"> 
     Header set Cache-Control "max-age=2592000, public" 
    </FilesMatch> 

    <FilesMatch "\\.(css)$"> 
     Header set Cache-Control "max-age=2592000, public" 
    </FilesMatch> 

    <FilesMatch "\\.(js)$"> 
     Header set Cache-Control "max-age=2592000, private" 
    </FilesMatch> 

    <filesMatch "\\.(html|htm)$"> 
     Header set Cache-Control "max-age=7200, public" 
    </filesMatch> 

    #Disable caching for scripts and other dynamic files 
    <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$"> 
     Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" 
     Header set Pragma "no-cache" 
     Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT" 
     #Header merge Cache-Control no-cache env=CGI 
     #Header merge Cache-Control no-cache env=NO_CACHE 
     #Header merge Cache-Control no-store env=NO_STORE 
    </FilesMatch> 
</IfModule> 
# END Cache-Control Headers 
+0

Хороший вопрос об утверждении размера, спасибо за это! И те изменения проведут. Благодаря! – czLukasss

+0

Нет, эти конфигурации htaccess не помогают. В Chrome все еще одно или два изображения по-прежнему не загружаются в 50% обновлении :(IE, Firefox и Safari кажется faine, если обновление isnt ctrl + f5 .. – czLukasss

+0

Я проверил с хромом, и у меня такая же проблема, как и у вас , но угадайте, какая опция «Отключить кеш» активирована. откройте панель инструментов веб-разработчика, перейдите на вкладку «Сеть» и убедитесь, что опция «Отключить кеш» не проверена. –

Смежные вопросы