Jag vill komma åt mina mp3:or när jag sitter på skolan.
Hemma kör jag Apache. Mp3-mappen är utdelad.
Skriptet körs från skolans webbserver (Linux).
Det hämtar hem Apaches indexsida för mp3-mappen
från min server och sparar den som en html-fil.
Sedan exekveras en fil med Unixkommandon som trimmar
till html-filen och bygger en spellista.
(Vad den gör är att slita bort allt utom filnamnen och
sätta in mitt ip framför och sedan kalla resultaten för mp3.m3u.)
wget -q [url]http://MITT_IP/mp3/[/url] -O lista.html
grep -i 'sound2.gif' lista.html > a
grep -i -v '.m3u' a > b
sed 's/<IMG.............................................="/http:\/\/MITT_IP\/mp3\//g' b > c
sed 's/">.*//g' c > mp3.m3u
chmod 777 mp3.m3u
rm -f lista.html
rm -f a
rm -f b
rm -f c
mv mp3.m3u ../mp3/mp3.m3u
Det verkar som om perlprogrammet vägrar köra kommandot
exec då det körs som cgi...
Som jag skrev kan html-koden köra andra skript som ligger
i samma mapp och har samma rättigheter som det skript
jag vill köra.
Dessutom funkar allt fram till exec. Där lägger den av.
Men bara då det körs från html-sidan. Om jag kör cgi-
filen direkt i prompten är allt frid o fröjd...
En liten punkt, ett snedstreck och ... ta-daa!
Tack Hansen!
:o)
Jag kan inte motstå frestelsen att kasta in en mer perl-ish lösning:
#!/usr/bin/perl
use strict;
use warnings;
use HTML::LinkExtor;
use LWP::UserAgent;
use URI::URL;
use constant REMOTE_URL => 'http://0.0.0.0/mp3/';
my $parser = HTML::LinkExtor->new;
my $agent = LWP::UserAgent->new;
my @mp3s = ();
my $response = $agent->get(REMOTE_URL);
my $base = $response->base;
if ( $response->is_success ) {
$parser->parse( $response->content );
for my $link ( $parser->links ) {
unless ( $link->[0] eq 'a' # TAG
and $link->[1] eq 'href' # ATTRIBUTE
and $link->[2] =~ m/\.mp3$/ ) # VALUE
{
next;
}
push( @mp3s, url( $link->[2], $base )->abs );
}
}
print "Content-type: audio/x-mpegurl\n\n";
while ( my $mp3 = shift(@mp3s) ) {
print $mp3, "\n";
}
269 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25