2014-01-05 55 views
0

我有這樣的代碼,但是,當我在哈寶的功能不會爲圖像在線工作記錄,它只是顯示圖像脫機:功能egeri()不工作

<?php 
$name = $_GET['habbo']; 
$home = file_get_contents("http://www.habbo.com.br/home/".$name); 
if (eregi("http://habboo-a.akamaihd.net/habboweb/63_1dc60c6d6ea6e089c6893ab4e0541ee0/2245/web-gallery/images/myhabbo/profile/habbo_online_anim.gif", $home)) 
{ 
$img = "http://habboo-a.akamaihd.net/habboweb/63_1dc60c6d6ea6e089c6893ab4e0541ee0/2245/web-gallery/images/myhabbo/profile/habbo_online.gif"; 
} 
else 
{ 
$img = "http://habboo-a.akamaihd.net/habboweb/63_1dc60c6d6ea6e089c6893ab4e0541ee0/2245/web-gallery/images/myhabbo/profile/habbo_offline.gif"; 
} 
header("Content-type: image/gif"); 
$im = imagecreatefromgif($img); 
imagegif($im); 
imagedestroy($im); 
?> 
+3

'eregi()'已被棄用,可能是由PHP的版本,您使用的去除。您需要使用'preg_match()'來代替(儘管我懷疑正則表達式根本不需要,而標準比較運算符會這樣做)。 –

+0

是的,看起來你可以使用'=='... – JAL

+0

警告:從PHP 5.3.0開始,此功能已被拒絕。依靠這個功能是非常不鼓勵的。 – RaviRokkam

回答

0

試試這個:

<?php 
$name = $_GET['habbo']; 
$home = file_get_contents('http://www.habbo.com.br/home/'.$habbo); 
if (stristr($home, 'http://habboo-a.akamaihd.net/habboweb/63_1dc60c6d6ea6e089c6893ab4e0541ee0/2245/web-gallery/images/myhabbo/profile/habbo_online_anim.gif') == TRUE) 
{ 
    $img = 'http://habboo-a.akamaihd.net/habboweb/63_1dc60c6d6ea6e089c6893ab4e0541ee0/2245/web-gallery/images/myhabbo/profile/habbo_online.gif'; 
} 
    else 
{ 
    $img = 'http://habboo-a.akamaihd.net/habboweb/63_1dc60c6d6ea6e089c6893ab4e0541ee0/2245/web-gallery/images/myhabbo/profile/habbo_offline.gif'; 
} 
header('Content-type: image/gif'); 
$im = imagecreatefromgif($img); 
imagegif($im); 
imagedestroy($im); 

stristr的作用就像eregi,當你不使用正則表達式,這應該找到字符串並比較它是TRUE還是FALSE。

更新: '=== TRUE' 到 '== TRUE'

+0

我也試過這個,但沒有工作,我'在線但出現圖像離線,可能是這個問題是'因爲代碼沒有得到文件內容??? – user3133630

+0

測試它,首先檢查代碼是否得到「任何東西」,然後你可以消除一件事時間... –

+0

好的,非常感謝! – user3133630

1

的問題是即eregi is depreciated as of PHP 5.3到5.4,並在PHP 5.5中完全刪除。但是那說,看看你的代碼,爲什麼eregi在那裏開始是沒有意義的。看看這一行:

if (eregi("http://habboo-a.akamaihd.net/habboweb/63_1dc60c6d6ea6e089c6893ab4e0541ee0/2245/web-gallery/images/myhabbo/profile/habbo_online_anim.gif", $home)) 

究竟發生了哪種模式匹配?我好像是一個簡單的==檢查給我。所以我會建議嘗試這個。我還清理您的格式,以及以提高可讀性:

$name = $_GET['habbo']; 

$home = file_get_contents("http://www.habbo.com.br/home/".$name); 

$check = "http://habboo-a.akamaihd.net/habboweb/63_1dc60c6d6ea6e089c6893ab4e0541ee0/2245/web-gallery/images/myhabbo/profile/habbo_online_anim.gif"; 

if ($check == $home) { 
    $img = "http://habboo-a.akamaihd.net/habboweb/63_1dc60c6d6ea6e089c6893ab4e0541ee0/2245/web-gallery/images/myhabbo/profile/habbo_online.gif"; 
} 
else { 
    $img = "http://habboo-a.akamaihd.net/habboweb/63_1dc60c6d6ea6e089c6893ab4e0541ee0/2245/web-gallery/images/myhabbo/profile/habbo_offline.gif"; 
} 

header("Content-type: image/gif"); 

$im = imagecreatefromgif($img); 

imagegif($im); 
imagedestroy($im); 
+0

我現在測試了它,但是還沒有工作,我不明白'因爲如果你用只是($ check = $ home)我在網上獲取圖像,但如果我使用($ check == $ home),我離線獲取圖像,但是我在線! – user3133630

+1

$ check = $ home會將$ check的值設置爲$ home的值,然後返回true來執行此操作。所以,它永遠是真的。 $ check == $ home會查看$ check與$ home是否相同。在php中查看[比較運算符](http://us2.php.net/manual/en/language.operators.comparison.php)。 – LoganEtherton

+0

@ user3133630問題的一部分是你的代碼毫無意義,使用'eregi'令人困惑。所以現在你需要擺脫'eregi',但不清楚你的比較或爲什麼這樣設置。意思是,'$ home'中的內容是什麼,爲什麼要與那個巨大的URL進行比較? – JakeGould

0

幾件事情:

首先,eregi是有利於preg_match使用不區分大小寫的正則表達式標誌(I)已過時。所以,在這個和將來需要進行正則表達式匹配的情況下,您應該切換到使用preg_match。

其次,eregi和preg_match不返回布爾值。所以,你將需要使用身份運算符(===或!==)來測試匹配。

最後,由於您在搜索中沒有使用正則表達式,因此很難進行匹配。你需要做這樣的事情:

if (eregi('/someregex/i', $home) !== FALSE){ 

這可能有助於您審查PCRE風格的正則表達式的語法,可以發現here,以及檢查返回值的函數,你正在使用。在php.net上有一個關於使用身份運算符檢查返回值的註釋。

看起來你只是在尋找一個用戶名,在這種情況下,通過stripos進行搜索會更有意義,因爲它比正則表達式快得多,並且只搜索字符串文字,因爲您似乎是這樣做:

$name = $_GET['habbo']; 
$home = file_get_contents("http://www.habbo.com.br/home/" . $name); 
if (stripos($home, "<whatever you're searching for>") !== FALSE) { 

無論哪種方式,你需要檢查你實際上在尋找什麼。目前,您似乎正在尋找在$ home的內容中通向該圖片的路徑。除非存在完整的字符串,否則您不會找到它。如果你只是$ HOME中搜索habbo_online_anim.gif,試試這個:

if (stripos($home, 'habbo_online_anim.gif') !== FALSE) { 
+0

我試過了,並沒有工作,真的我不知道爲什麼:( – user3133630