Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Dziwny problem z fopen
jajcarzd1
post
Post #1





Grupa: Zarejestrowani
Postów: 215
Pomógł: 19
Dołączył: 24.12.2003
Skąd: Przemyśl

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


Witam

Mam takie dziwny problem. Otóż używam poniższej konstrukcji do sprawdzenia czy istnieje plik graficzny na zdalnym serwerze.

  1. if(fopen('http://subdomena.serwer.pl/studio/500_348214-222@b.jpg','r')) return true; else return false;


Oczywiście plik ten istnieje ale w trakcie wywoałania funkcji wywala mi warninga

  1. Warning: fopen(http://...@b.jpg) [function.fopen]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in ..


tak jakby obcinał mi nazwę pliku do małpy. Co ciekawe wywołanie np. getimagesize zwraca mi podobny błąd

  1. getimagesize('http://subdomena.serwer.pl/studio/500_348214-222@b.jpg');
  2. Warning: getimagesize(http://...@b.jpg) [function.getimagesize]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found


Wystepuje to na serwerze produkcyjnym jak lokalnie nakompie odpalam skrypt jest ok. Ale co ciekawsze jeśli na serwerze produkcyjnym wywoła fopen do innego serwera na kórym jest to samo zdjęcie to ta druga instrukcja już błędu nie zwraca

  1.  
  2. if(fopen('http://subdomena.serwer.pl/studio/500_348214-222@b.jpg','r')) return true; else return false;
  3. if(fopen('http://subdomena.serwer2.pl/studio/500_348214-222@b.jpg','r')) return true; else return false;
  4.  
  5. //poprawka żeby nie wprowadzać w błąd w rzeczywistości testowałem z echem czyli:
  6.  
  7. if(fopen('http://subdomena.serwer.pl/studio/500_348214-222@b.jpg','r')) echo "jest na serwer 1"; else echo "nie ma na serwer 1";
  8.  
  9. echo "<br>";
  10.  
  11. if(fopen('http://subdomena.serwer2.pl/studio/500_348214-222@b.jpg','r')) echo "jest na serwer 2 "; else echo "nie ma na serwer 2";


wiec juz pojęcia nie mam co to może być bo sądziłem że może jakieś ograniczenia ale wtedy odwołanie do serwer2.pl też by mi wywalało błąd.

Dodam że allow_url_fopen = ON

Co o tym sądzicie ?

Ten post edytował jajcarzd1 19.12.2010, 23:23:23


--------------------
My mind is glowing ...
Jeśli pomogłem push the button :)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
Quadina
post
Post #2





Grupa: Zarejestrowani
Postów: 200
Pomógł: 38
Dołączył: 1.12.2010
Skąd: Wrocław

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


Z tego co mi wiadomo, nie można w systemach uniksowych używać znaku @ więc dziwie się, że zwraca Ci błąd. Znak @ wykorzystuje się w takiej sytuacji łączenia się ze stroną do której wymagany jest HTTP Auth np.:
Kod
http://login:haslo@domena.pl

Zatem system zwraca ci błąd poprawnie, nie masz pliku b.jpg w folderze lokalnym.

Co do sytuacji z dwoma linijkami, to pamiętaj, że linijkę wyżej robisz return, zatem druga linijka już się nie wykona, bo funkcja zakończy działanie z odpowiednim wynikiem.


--------------------
Warsztat: NetBeans 7.2 Beta, PHP, MySQL, PostgreSQL, Symfony (<=1.4), Diem, Java, Sieci neuronowe
Go to the top of the page
+Quote Post
jajcarzd1
post
Post #3





Grupa: Zarejestrowani
Postów: 215
Pomógł: 19
Dołączył: 24.12.2003
Skąd: Przemyśl

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


Cytat(Quadina @ 19.12.2010, 22:17:02 ) *
Z tego co mi wiadomo, nie można w systemach uniksowych używać znaku @ więc dziwie się, że zwraca Ci błąd. Znak @ wykorzystuje się w takiej sytuacji łączenia się ze stroną do której wymagany jest HTTP Auth np.:
Kod
http://login:haslo@domena.pl

Zatem system zwraca ci błąd poprawnie, nie masz pliku b.jpg w folderze lokalnym.


Ok też to brałem pod uwagę ale tak jak pisałem odwołanie z tego samego skryptu ale do innego serwera już zwraca poprawny wynik.

Cytat(Quadina @ 19.12.2010, 22:17:02 ) *
Co do sytuacji z dwoma linijkami, to pamiętaj, że linijkę wyżej robisz return, zatem druga linijka już się nie wykona, bo funkcja zakończy działanie z odpowiednim wynikiem.


Tu akurat wrzuciłem z returnami ale normalnie w celach testowych miałem ech-a więc to nei jest problemem, bo wyglada tak
  1. if(fopen('http://subdomena.serwer.pl/studio/500_348214-222@b.jpg','r')) echo "jest na serwer 1"; else echo "nie ma na serwer 1";
  2.  
  3. echo "<br>";
  4.  
  5. if(fopen('http://subdomena.serwer2.pl/studio/500_348214-222@b.jpg','r')) echo "jest na serwer 2 "; else echo "nie ma na serwer 2";
  6.  


Dodam jeszcze że na innym serwerze uniksowym wywołuje ten sam kod i działa bez problemu

Ten post edytował jajcarzd1 19.12.2010, 23:24:23


--------------------
My mind is glowing ...
Jeśli pomogłem push the button :)
Go to the top of the page
+Quote Post
mls
post
Post #4





Grupa: Zarejestrowani
Postów: 677
Pomógł: 89
Dołączył: 31.08.2003
Skąd: Warszawa

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


Ustaw w php.ini na lokalnym serwerze ERROR_REPORTING = E_ALL oraz DISPLAY_ERRORS = On to zobaczysz, że lokalnie też takie błędy będzie wyświetlało. I znak "@" w nazwie pliku nie ma nic do rzeczy, jeśli już, to ma znaczenie użycie go przed fopen (czyli @fopen(...))


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





Grupa: Zarejestrowani
Postów: 215
Pomógł: 19
Dołączył: 24.12.2003
Skąd: Przemyśl

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


Cytat(mls @ 20.12.2010, 11:32:11 ) *
Ustaw w php.ini na lokalnym serwerze ERROR_REPORTING = E_ALL oraz DISPLAY_ERRORS = On to zobaczysz, że lokalnie też takie błędy będzie wyświetlało. I znak "@" w nazwie pliku nie ma nic do rzeczy, jeśli już, to ma znaczenie użycie go przed fopen (czyli @fopen(...))


Ale gdyby sypało błędem to by nie ciagnęło pliku. Poza tym tak jak pisałem w tym samym skrypcie przecięz sa 2 identyczne linijki gdzie pierwsza wali warninga a druga juz nie bo przeciez jest otwierany plik


--------------------
My mind is glowing ...
Jeśli pomogłem push the button :)
Go to the top of the page
+Quote Post
surrealistic
post
Post #6





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 20.12.2010

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


Spróbuj użyć przed fopen '@'.
Go to the top of the page
+Quote Post
jajcarzd1
post
Post #7





Grupa: Zarejestrowani
Postów: 215
Pomógł: 19
Dołączył: 24.12.2003
Skąd: Przemyśl

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


Cytat(surrealistic @ 20.12.2010, 12:15:36 ) *
Spróbuj użyć przed fopen '@'.


Chyba nie czytałeś postu dokładnie. NIe interesuej mnie maskowanie błędu tylko kwestia występowania błędu dla jednego linku a dla drugiego poniżej już nie. Jeden jest linijkę niżej od drugiego. I w pierwszym jest obcinany adres a w drugim zdjęcie jest poprawnie otwierane


--------------------
My mind is glowing ...
Jeśli pomogłem push the button :)
Go to the top of the page
+Quote Post
franki01
post
Post #8





Grupa: Zarejestrowani
Postów: 508
Pomógł: 75
Dołączył: 2.11.2005
Skąd: Bydgoszcz

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


Jeżeli @ powoduje błąd, to go zastąp:

  1. if(fopen('http://subdomena.serwer.pl/studio/500_348214-222%25b.jpg','r')) return true; else return false;
Go to the top of the page
+Quote Post
jajcarzd1
post
Post #9





Grupa: Zarejestrowani
Postów: 215
Pomógł: 19
Dołączył: 24.12.2003
Skąd: Przemyśl

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


Cytat(franki01 @ 20.12.2010, 13:46:05 ) *
Jeżeli @ powoduje błąd, to go zastąp:

  1. if(fopen('http://subdomena.serwer.pl/studio/500_348214-222%25b.jpg','r')) return true; else return false;


Tez tego próbowałem ale wtedy mimo ze adres jest już pełny to jednak nie widzi pliku

A może serwer zdalny z którego ciągnięte jest zdjęcie ma jakieś ustawienie które wpływa na takei zachowanie.
Próbowałem jeszcze CURL-em no i oczywiście z tego pierwszega serwera zdjęcia nie ciągnie tylko zapisuje mi w pliku do którego miałobyć zapisane zdjęcie tekst HTML

  1. The requested URL /studio/500_348214-222@b.jpg was not found on this server.


a linijkę niżej robię wywołanie dla tego drugiego serwera no i fotkę oczywiście ciągnie i zapisuje do pliku.


--------------------
My mind is glowing ...
Jeśli pomogłem push the button :)
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: 19.08.2025 - 10:43