[PHP] Problem z otwarciem pliku znajdującego sie poza serw.

0

Witam
Mam problem, a mianowice nie moge sie odwolac do pliku znajdującego sie na zewnętrznym serwerze, gdy plik znajduje sie na serwerku to wszystko ładnie śmiga, jednak jeśli znajduje się gdzieś poza serwerem to sie wysypuje. Mam dostęp do .htaccess. Macie może jakieś pomysły na rozwiązanie tego problemu??
Z góry dzięki. [browar]
Pozdrawiam.

0
echo file_get_contents('http://serwer.pl/plik.txt');
0
Coldpeer napisał(a)
echo file_get_contents('http://serwer.pl/plik.txt');

No niestety też nie śmiga:(

0

Dostajesz błąd jakiś?

Prawdopodobnie problem jest związany z opcją allow_url_fopen ustawioną na false w pliku php.ini, albo z włączonym safe_mode (ewentualnie na stałe ustawionym open_basedir w pliku php.ini). Być moze da się ustawić to tak jak trzeba przez .htaccess, ale nigdy nie próbowałem zmieniać przez to ustawień PHP (na oko to coś w stylu polecenia php_value allow_url_fopen 1).

0
Ktos napisał(a)

Dostajesz błąd jakiś?

Prawdopodobnie problem jest związany z opcją allow_url_fopen ustawioną na false w pliku php.ini, albo z włączonym safe_mode (ewentualnie na stałe ustawionym open_basedir w pliku php.ini). Być moze da się ustawić to tak jak trzeba przez .htaccess, ale nigdy nie próbowałem zmieniać przez to ustawień PHP (na oko to coś w stylu polecenia php_value allow_url_fopen 1).

Warning: fopen(http://www.google.com/images/firefox/fox1.gif): failed to open stream: No route to host in /home/cymeshh/index.php on line 126
To odnośnie błędu, niestety zmiany w pliku .htaccess nic nie dają:(

0

a spróbuj z innym adresem, albo zobacz czy zadziała zamiast www.google.com - 72.14.207.99, odpal phpinfo() i po prostu sprawdź wartości dla allow_url_fopen, safe_mode, open_basedir czy w ogóle o to chodzi i czy warto się grzebać w .htaccess

jaką masz wersję php ? poczytaj komentarze na http://pl.php.net/fopen

0

allow_url_fopen On
safe_mode Off
open_basedir /home/cymeshh:/usr/lib/php:/usr/local/lib/php:/tmp

Wersja php:
PHP Version 4.4.2 with Hardening-Patch 0.4.8

Może to pomoże:
http://cymeshh.fileplace.biz/phpinfo.php

W komentarzach pisze aby zmienić fopen na file_get_contents ale niestety to nic nie daje:(

0

No to ci już Ktos pisał o basedir a ty nic nie mówisz, a w komentarzach nie pisze żeby zmienić na file_get_contents tylko jest mnóstwo rozwiązań chociażby z fsockopen które powinno zadziałać

0
Adamo napisał(a)

fsockopen które powinno zadziałać

A nie lepiej curl :> Zaimplementowane jest ;)

0

Osobiście uzywam fsockopen:

function GetDateFromUrl($link)
 {
	 if (preg_match('@^http://(www\.)?[^/]+$@i', $link)) $link .= '/';

	 global $date;
   $date = '';
   $link = parse_url($link);
   
   $path = (!empty($link['path'])) ? $link['path'] : '/';
	 $path .= (!empty($link['query'])) ? '?' . $link['query'] : '';
	 
	 //$header =  'HEAD '.$path.' HTTP/1.0\r\n';  //tylko nagłówek
   $header  = 'GET '.$path.' HTTP/1.0'."\r\n";
   $header .= 'Host: '.$link['host']."\r\n";
   $header .= 'Content-type: application/x-www-form-urlencoded'."\r\n";
   $header .= 'User-Agent: twardy_bot/1.0 (http://inteco.win.pl)'."\r\n";
   $header .= 'Content-length: 0'  . "\r\n\r\n";
	 //$header .= 'Connection: close\r\n\r\n'; //tylko nagłówek
   
	 if ($of = @fsockopen($link['host'], (isset($link['port']) ? $link['port'] : 80), $err_num, $err_msg, 60)) 
	 {
		 fputs($of, $header);
     while (!feof($of))
		 {
       if (!$date .= fgets($of,10000))
       {
         fclose($of);
         return false;
       }

     }
     
     fclose($of);

     if (!preg_match('/^HTTP\/1.. 200/i',$date))
     {
       if (preg_match('/^HTTP\/1.. 30\d/i',$date) && preg_match('@^Location:\s+(http://.+)$@mi', $date, $rn))
			 {
			   return GetDateFromUrl(rtrim($rn[1]));
			 }
			 
			 return false;
     }
   
   } else return false;
   
	 $date = preg_replace('@^.+?(\r\n\r\n|\n\n)@si','',$date);
   return true;
   
 }

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