2009-05-27 12 views
1

Ich bin dabei, einen Perl-basierten Web-Crawler zu schreiben, den ich vor fast 8 Jahren in PHP geschrieben habe. Ich benutzen das ganz praktisch URI :: URL-Modul in Perl Dinge wie:PHP Äquivalent zu Perls URI :: URL

$sourceUrl = '/blah.html'; 
$baseHost = 'http://www.example.com'; 
my $url = URI::URL->new($sourceUrl, $baseHost); 
return $url->abs; 

kehrt: 'http://www.example.com/blah.html'

die parse_url Funktion in PHP ist sehr nützlich, aber es ist etwas robuster? Speziell etwas, das die obige Funktionalität geben wird?

+1

Die obige Funktionalität wird durch das "." String-Verkettungsoperator. Vielleicht war das nicht der beste Beispielcode, um zu demonstrieren, was Sie brauchen. –

Antwort

1

Vielleicht Zend_Uri ist was du suchst?

+0

definitiv vielversprechend, aber immer noch nicht so schlau und flexibel zu sein. – pixel

0
print $baseHost . $sourceURL; 

Fehle ich etwas? Ihr Weg scheint unnötig kompliziert.

+0

Es ist wirklich nicht. URI Objekte sind ein Segen (Perl Wortspiel beabsichtigt). So schön, wenn Sie Teile nach dem Konstruieren modifizieren möchten, wie das Ändern des Schemas, der Parameter oder sogar der Auth. Vereinfachung/Korrektur der URL mit kanonischen usw. Abstraktion und Verkapselung sind immer die Mühe wert. Dies sind die Arten von Dingen, die ich von Perl vermisse, jetzt da ich in der sehr unglücklichen Welt von PHP bin. – Trey

+0

Vielleicht mache ich nicht genug "Enterprise" -Artikel, aber in PHP-Jahren bin ich immer noch auf eine Situation gestoßen, in der die zusätzlichen Codezeilen, die Sie gepostet haben, die Mühe wert waren. Ich würde einfach eine baseurl() - Funktion erstellen, die das Schema, die Parameter, die Auth, usw. angibt und verkettet (oder ein Framework verwendet, das das schon für mich tut). – ceejayoz

0

Ich habe ein wenig Suche auf dem PEAR-Archiv, und meine erste Schätzung Approximation von URI::URL ist Net_URL2. Vielleicht willst du das mal probieren?

+0

Net_URL2 ist nett, obwohl es scheint nicht die Dinge richtig zu behandeln. Dh beginnend mit einer nicht vollständig qualifizierten URL von 'page.html', überprüfe ich den $ url-> hostname, um zu sehen, ob es leer ist (was es ist), dann mache $ url-> setHost ('www.example.com') und aus irgendeinem Grund gibt $ url-> getUrl() 'www.example.compage.html' zurück ... es ist einfach nicht schlau genug. Ich bin dabei, URI :: URL zu übernehmen und in PHP zu konvertieren. :) – pixel

+0

Wenn du das tust, wäre das sicherlich ein schöner Beitrag zur PHP-Community! –