2011-09-19 15 views
8

Zrobiłem aplikację na Twitterze, aby po prostu publikować tweety z mojej strony internetowej, używając skryptów PHP "twitteroauth" i "oauth" here.Dlaczego moja aplikacja Twitter zwraca błąd portu?

Wszystko działa, ale moje dzienniki błędów dają mi ten błąd:

Undefined index: port OAuth.php 383

chociaż to nie wydaje się być hamowanie moje skrypty funkcjonowanie, chciałbym, aby moje logi błędów wolne od hałasu . I unikaj ewentualnych przyszłych problemów.

Każdy pomysł, dlaczego tak się dzieje?

Dla porównania kodu w OAuth.php dziennik błędów wskazuje na to:

public function get_normalized_http_url() { 
$parts = parse_url($this->http_url); 
$port = @$parts['port'];  <-- Line 383 
$scheme = $parts['scheme']; 
$host = $parts['host']; 
$path = @$parts['path']; 
$port or $port = ($scheme == 'https') ? '443' : '80'; 
if (($scheme == 'https' && $port != '443') 
|| ($scheme == 'http' && $port != '80')) { 
$host = "$host:$port"; 
} 
return "$scheme://$host$path"; 
} 
+0

No, co to '$ parts [ "port"]' zawierać? Nie znam biblioteki, ale jeśli jest pusta, może musisz dodać wartość? –

Odpowiedz

7

Jest to błąd w pliku OAuth.php, uzyskuje dostęp do indeksu tablicy bez wykonywania sprawdzania indeksu.

Oczywiście koder/ette, który to napisał był tak sprytny - sprytny, aby użyć operatora tłumienia błędów @ zamiast robić prawidłową kontrolę indeksu - będąc leniwym (aby założyć, że jest najlepszy).

Zgłoś to jako błąd w górę, poprawka jest trywialne:

$parts = parse_url($this->http_url) + array('port'=>NULL, 'path'=>NULL); 

i odkręcając dwie @ operatorów.

5

Dzieje się tak dlatego parse_url() nie gwarantuje powrotu numer portu (Kopalnia nacisk):

If the component parameter is omitted, an associative array is returned. At least one element will be present within the array.

Spróbuj użyć czegoś takiego, jak $port = (array_key_exists('port', $parts) ? $parts['port'] : 80);, aby ukryć powiadomienie, jeśli nie chcesz dotykać swojego error_reporting.

Powiązane problemy