Bekijk Volledige Versie : perl fileget
Doel:
Prog/script dat instelbaar is tot op de seconde om steeds dezelfde foto te downloaden en op te slagen in een unieke map met incrementing nummers.
1) wget: http://site.com/resultaat.jpg om de 60 seconden downloaden en
2) opslagen in map met i+1 als naam.
Zodat er zeker niet met caching gewerkt wordt.
Doel:
Er wordt een medische foto gegenereerd en die moet gedownload worden en opgeslagen in een unieke map om nadien met een programma te vergelijken.
Ik ben gevraagd om het eerste deel te maken, het downloaden en opslagen.
Php kan waarschijnlijk niet vanwege de max execution time en caching waardoor de medische resultaten fout zijn (steeds zelfde foto).
In bepaalde momenten moet men ook simpel de tijd trager kunnen zetten naar bv 120 seconden tot om de 20 seconden.
Ik dacht dus aan perl, maar ik ken onvoldoende perls om dit scriptje te maken.
Kan iemand dit hier vlug scripten? De wetenschap is u dankbaar.
#!/usr/bin/perl
use LWP::Simple;
$URL = ("http://site.com/resultaat.jpg");
$content = get "$URL";
....?
Het scriptje mag hier gepost worden, kan misschien later nogmaals voor iemand van pas komen. Bedankt!!!
Zoiets? Ongetest, even heel snel in mekaar gemept :
<?php
// Tijd limiet uitzetten
set_time_limit(0);
// Instellingen
$WGET = "/bin/wget";
$INTERVAL = 20;
$URL = "http://www.webhostingtalk.nl/images/smilies/wht_love.gif";
$OUTDIR = "/tmp/download/";
$TYPE = ".gif";
// Deze 2 niet veranderen:
$exit = false;
$nextrun = 0;
// Main loop
while (!$exit) {
// Als /tmp/shutdown bestaat moeten we afsluiten!
if (file_exists('/tmp/shutdown')) {
$exit = true;
// Eventueel de /tmp/shutdown file weggooien, misschien niet verstandig
// unlink('/tmp/shutdown');
}
// Niet te asociaal veel CPU tijd opeten, even slaapie doen
usleep(100000);
// Moeten we alweer downloaden?
if (time() >= $nextrun) {
// Download interval controleren
// in /tmp/interval moet 1 getal staan, het aantal secondes tussen downloads
$interval = intval(trim(file_get_contents('/tmp/interval')));
// Volgende download tijd instellen
$nextrun = time() + $interval;
// Opslaan as "download" + time() + $TYPE ; in $OUTDIR
$OUTFILE = $OUTDIR.'download'.time().$TYPE;
`$WGET -t 1 -q -o /dev/null -O $OUTFILE $URL`;
}
}
echo("Found /tmp/shutdown, terminated.");
?>
shell_exec() has been disabled for security reasons
Mmhh, twijfel... zou ik dit wel durven toelaten op de server?
Het is nodig voor dit script.
Daarmee dat ik ook al meteen dacht aan perl.
Dit script moet je natuurlijk wel via de command line uitvoeren, niet via je webbrowser. Op de command line is het uitzetten van `` en shell_exec enzo nogal onnuttig, aangezien je al op de command line zit :-)
En als je dan toch command-line bezig bent, wat je met perl toch ook zal moeten, dan kan je net zo goed php gebruiken. Tenzij je echt liever perl wil, maar dan kan ik je verder niet helpen, perl is (IMHO) te lelijk om ook maar naar te willen kijken :p
:p
Lang leve php.
Ok, bedankt.
Maar ik heb dit uitgevoerd in shell, via php naambestand.php
Dus niet via de browser.
En dan nog krijg ik die shell_exec error.
Is het mogelijk om aan de ssh php andere mogelijkheden toe te wijzen dat shell_exec wel toegestaan is, terwijl de browser dit niet mag?
Jazeker, op debian in ieder geval wel, andere distributies ondersteunen dit vast ook wel:
ls /etc/php5
apache/ apache2/ cgi/ cli/ conf.d/
gewoon in de cli directory kijken en daar de php.ini aanpassen :)
Kan zijn dat 'ie ergens anders staat als je geen debian draait, dan moet je even zoeken :)
[root@server~]# locate php.ini
/etc/php.ini
/etc/php.ini2
/etc/php.ini-zend_optimizer.bak
/root/php-5.2.0/php.ini-recommended
/root/php-5.2.0/php.ini-dist
/root/php-5.2.0 ex/php.ini-recommended
/root/php-5.2.0 ex/php.ini-dist
/usr/local/Zend/etc/php.ini
/usr/local/apache2/php/php.ini
/usr/src/redhat/SOURCES/php-4.2.1-php.ini-dist.patch
/usr/webconfig/etc/php.ini
/home/maillist/public_html/admin/php.ini
Dit is de php.ini die nu als webserver draait:
/usr/local/apache2/php/php.ini
Maar hoe kan ik dan zorgen dat het wel in ssh mag uitgevoerd worden die "shell_exec() ", maar niet op de webservers?
Want als ik dat toelaat, die "shell_exec() " kunnen hostingklanten toch ook dat command uitvoeren, en dat is dan toch gevaarlijk?
Dat hangt toch echt af van welke linux distributie je hebt draaien, zo te zien is het in ieder geval geen debian en kan ik dus niet zo even snel zeggen welke file je moet hebben.
Kijk eens in de command line php welke php.ini deze gebruikt? (gewoon even phpinfo(); output bekijken). Zolang dat een andere php.ini is als die apache gebruikt, is het een kwestie van die php.ini aanpassen, als het dezelfde is, dan gaat het niet lukken op die manier.
Het is dezelfde.
En het is een CentOs variant.
Dan maar tijdelijk riskeren dat we gehackt worden, want ondertussen staat heel het onderzoek stil... :s