Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> obrazki przy pomocy readfile() i ajax
agmakonts
post
Post #1





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 20.08.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Witam
mam taki kod:
  1.  
  2. header('Content-Type: '.$post->post_mime_type);
  3.  
  4. $name = basename($post->guid);
  5. $base = home_url();
  6. $path= $_SERVER{'DOCUMENT_ROOT'}.str_replace($base,'',$post->guid);
  7. header ('Content-Disposition: inline; filename='.$name);
  8. header ('Content-length: ' .filesize($path));
  9. readfile($path);
  10.  


Generalnie wszystko chodzi super dopóki zapytanie nie jest ajaxowe. Gdy leci prez XMLHttpRequest przeglądarka po prostu się zawiesza.
Nie wiem w czym problem a nigdzie nie znalazłem pomocy. Ma ktoś jakiś pomysł?


--------------------
Folio :: Blog
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
fander
post
Post #2





Grupa: Zarejestrowani
Postów: 231
Pomógł: 22
Dołączył: 6.10.2008

Ostrzeżenie: (0%)
-----


Dziwisz się że nie działa skoro próbujesz w obiekt odpowiedzi Ajaxa wsadzić zawartość obrazka. Jeśli nawet załadowałbyś zawartość obrazka, to co z tymi danymi będziesz w stanie zrobić ?

Ten post edytował fander 18.12.2010, 08:30:19
Go to the top of the page
+Quote Post
agmakonts
post
Post #3





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 20.08.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Rozchodzi się tu o fancybox który ma lądować obrazek, gdy w adresie był statyczny plik jpg wszystko było super ale chciałem mieć pewność że gdy coś się stanie z JS albo stronę będzie zwiedzać bot nie otrzymają pliku jpg tylko kolejną stronę z nagłówkiem, stopką, nawigacją itp. Ten kod jest częścią skryptu który w zależności od typu żądania daje albo obrazek albo html. Teoretycznie jak Fancybox pobiera sobie obrazek z serwera to nie powinno go interesować co go generuje a z resztą to cieszyłbym się nawet z błędu a nie tak jak to jest teraz z zawieszenia browsera.

I przyznaje się, termin AJAX to tu trochę nie pasuje ;]

Ten post edytował agmakonts 18.12.2010, 10:10:49


--------------------
Folio :: Blog
Go to the top of the page
+Quote Post
flashdev
post
Post #4





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


Pewnie nie do końca o to chodzi, ale zgodnie z tematem obrazki wczytują się przy pomocy readfile i ajax, więc może ten kod na coś się przyda.

  1. <?php
  2. if( isset($_GET[img]) ){
  3. readfile('img.png');
  4. echo 'data:image/png;base64,'.base64_encode(ob_get_clean());
  5. }else{
  6. ?>
  7. <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
  8. <script>
  9. $(function(){
  10. $('button').click(function(){
  11. $.ajax({
  12. url: 'index.php?img',
  13. success: function(url){
  14. $('body').append('<img src="'+url+'" />');
  15. }
  16. });
  17. });
  18. });
  19. </script>
  20. <button>Zaladuj obraz</button>
  21. <?php
  22. }


--------------------
Go to the top of the page
+Quote Post
agmakonts
post
Post #5





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 20.08.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


@flashdev - dzięki za kod, co prawda nie udało mi się przerobić go by działał u mnie sad.gif

Postaram się to lepiej wytłumaczyć:

Gdy wchodzę w wordpressową stronę załącznika która zawiera kod z pierwszego postu wszystko jest ok i obrazek jest wyświetlany w przeglądarce tak samo jakby wpisać jego bezpośredni url.

nagłówki po wpisaniu adresu bezpośrednio
http://img513.imageshack.us/img513/7695/headersa.png
efekt tego samego adresu załadowanego przez JS do lightboxa/fancyboxa
http://img502.imageshack.us/img502/8535/screenq.png

Generalnie wygląda to tak jakby nawalały nagłówki ale dlaczego to nie mam pojęcia, przecież jakbym tam podał adres do pliku JPG bezpośrednio to pokazałby się on w nowej warstwie bez problemu.




--------------------
Folio :: Blog
Go to the top of the page
+Quote Post
bim2
post
Post #6





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Nie możesz tak załądować bo nie potraktuje tego przeglądarka jako obrazka. Ja robisz loadAjax(tutaj masz jakis url) to ten url z ajaxa daj jaki <img src="tutaj ten url" /> i wtedy obrazek ci przegladarka od nowa wczyta winksmiley.jpg


--------------------
Go to the top of the page
+Quote Post
agmakonts
post
Post #7





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 20.08.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Nie do końca rozumiem.
Nagłówki wyglądają ok po załadowaniu tego przez js http://img24.imageshack.us/img24/1300/jsheader.png więc nie wiem czemu przeglądarka ma nie traktować tego jako obrazek.

Ten post edytował agmakonts 18.12.2010, 16:44:09


--------------------
Folio :: Blog
Go to the top of the page
+Quote Post
bim2
post
Post #8





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


No ale jak ty to łądujesz do jS? Poprzez AJAXA? Ajax służy do pobrania danych w formie tekstu... nie obrazka. Wszystko poprawnie wyświetla. Tak by to wyglądało gdybyś wyświetlił sobie zawartość obrazka jako tekst. Dlatego musisz użyć do tego tag <img>


--------------------
Go to the top of the page
+Quote Post
agmakonts
post
Post #9





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 20.08.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Od początku:

Cały skrypt jest po to by w laghtboxie wyświetlał się sam obrazek a przy wejść bezpośrednim html.

Wiem ze jak bym pobrał dane bezpośrednio to tak by wyglądały i wiem że powinny być w img ale.... całość jest ładowana do Fancyboxa (http://fancybox.net/) który automatycznie rozpoznaje czy ma załadować html czy img.

Może i faktycznie to pytanie powinno być w JS, nie znam na tyle javascriptu by być pewnym. Generalnie mimo poprawnych nagłówków fancybox nie widzi że jest to obrazek i na tym polega problem.

Jeśli ma ktoś lepszy pomysł na obejście problemu w Wordpressie to chętnie skorzystam bo siedzę nad tym już chyba 12H bez przerwy i zaczynam czuć się pokonany.

Początek pliku attachment.php który ładuje i fancybox i ma być ładowany bezpośrednio wygląda tak:

  1. <?php
  2. if($_SERVER["HTTP_X_REQUESTED_WITH"] == 'XMLHttpRequest')
  3. {
  4. if (have_posts()) :
  5. while (have_posts()) : the_post();
  6.  
  7. header('Content-Type: '.$post->post_mime_type);
  8.  
  9. $name = basename($post->guid);
  10. $base = home_url();
  11. $replace = str_replace($base,'',$post->guid);
  12.  
  13. header ('Content-length: ' .filesize($_SERVER{'DOCUMENT_ROOT'}.$replace));
  14. readfile($_SERVER{'DOCUMENT_ROOT'}.$replace);
  15.  
  16. ?>
  17. <?php
  18.  
  19. endwhile; endif;
  20. }else {
  21.  
  22.  
  23. ?>
  24.  
  25. <?php get_header();?>
  26. <?php
  27. global $options;
  28. foreach ($options as $value) {
  29. if (get_settings( $value['id'] ) === FALSE) { $$value['id'] = $value['std']; } else { $$value['id'] = get_settings( $value['id'] ); }
  30. }
  31. ?>
  32. <?php if (have_posts()) : ?>
  33. <?php while (have_posts()) : the_post(); ?>
  34.  
  35.  
  36. <section id="header-image">
  37. <?php echo get_the_post_thumbnail($post->post_parent, 'header' ); ?>
  38. </section>
  39.  
  40. <section id="single-title">
  41. <h2 class="single">
  42. <?php
  43. $parent_title = get_the_title($post->post_parent);
  44. echo $parent_title;
  45. ?>
  46. </h2>
  47.  
  48. (...................)
  49.  
  50.  



JS Fancybox (lightbox) sprawdza parametr href odnośnika i w zalezności od zawartości ładuje albo html albo obrazek do tagu <img>. W href jest adres attachment.php z odpowiednimi parametrami.

Live: http://91.193.211.226/galeria/femespik


--------------------
Folio :: Blog
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 08:18