Goedendag,
Ik ben een programmeer leek maar heb een probleem met een scriptje waarvan ik hoop dat iemand me kan helpen.
Ik maak gebruik van een script dat inlogd op een bepaalde website en daar een bestand download en op mijn eigen server onder bepaalde naam weer opslaat.
Nu gaat dat goed zolang het een directe verwijzing is naar het bestand.
Maar nu moet ik vrijwel hetzelfde doen maar kan ik niet rechtstreeks naar het bestand verwijzen omdat deze dynamisch opgebouwd wordt en de naam dagelijks veranderd (zit een maand en datum in bestandsnaam.
Wel heb ik een vaste link die ervoor zorgt dat laatste bestand automatisch start met downloaden.
Dat werkt echter zolang ik die gewoon ind e browser open en het bestand dan naar mijn computer download.
Deze link ziet er als volgt uit:
als ik het script met deze url als locatie van file aanroep via cron-job krijg ik de volgende foutmelding:
/bin/sh: -c: line 0: unexpected EOF while looking for matching `"'
/bin/sh: -c: line 1: syntax error: unexpected end of file
het script is als volgt:
<?php
$remotefile = 'http://domeinnaam.nl/wp-admin/admin.php?page=pmxe-admin-manage&id=1&action=get_file&_wpnonce=9caaead0e3';
$localfile = '/home/wns/domains/domeinnaam.nl/public_html/feeds/bestandsnaam-test.csv'; // <-- Change this to an existing directory where to store the xml file
// This file is needed to save the session cookie
$scalacookie ='tmp/naamcookie.txt'; // <-- Change this to an existing directory to store a temporary file containing the cookie (cookie jar)
$loginUrl = "http://domeinnaam.nl/wp-admin";
// User name and password to login the website, a separate account can be create for this.
$user = 'gebruikersnaam'; // <-- put your login here
$pw = 'wachtwoord'; // <-- put your password here
//init curl
$ch = curl_init();
//Set the URL to work with
curl_setopt($ch, CURLOPT_URL, $loginUrl);
// ENABLE HTTP POST
curl_setopt($ch, CURLOPT_POST, 1);
//Set the post parameters
curl_setopt($ch, CURLOPT_POSTFIELDS, 'login_email='.$user.'&login_password='.$pw);
//Handle cookies for the login
curl_setopt($ch, CURLOPT_COOKIEJAR, $naamcookie);
//Setting CURLOPT_RETURNTRANSFER variable to 1 will force cURL
//not to print out the results of its query.
//Instead, it will return the results as a string return value
//from curl_exec() instead of the usual true/false.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//execute the request (the login)
$store = curl_exec($ch);
//the login is now done and you can continue to get the
//protected content.
//set the URL to the protected file
curl_setopt($ch, CURLOPT_URL, $remotefile);
//execute the request
$content = curl_exec($ch);
// close session
curl_close($ch);
//save the data to disk
file_put_contents($localfile, $content);
?>
Iemand enig idee hoe ik dat kan oplossen zodat hij ook met die aanroep van te downloaden bestand werkt?
Groet
Het bestand dat je hebben wilt komt van een externe partij? Kan je hier ook het volledige adres gegeven waaruit je em nu probeert te downloaden? Anders is het moeilijk te raden wat je mist.
Je zegt zelf dat er een patroon in het opslaan zit /2015/09/Bla september 9.csv o.i.d. Dan kan je dus ook het bestand van gisteren als je dit pad weet na te bootsen.
Nee komt niet van externe partij.
Ik heb een webshop waarin al mijn producten staan.
Deze producten wil ik ook op o.a. product vergelijkers zoals beslist plaatsen.
Nu heb ik een plugin die de benodigde velden naar een csv of xml bestand kan exporteren.
Die plugin slaat echter op een onhandige plek op en onder een dagelijks wisselende naam.
Wel heb ik een vaste link waarmee bij aanroepen automatisch laatste versie van bestand wordt gedownload.
Die linkt zit echter in mijn admin systeem en werkt dus enkel als ik in de admin ben ingelogd en kan ik dus niet doorgeven aan die externe partijen om de laatste csv te downloaden.
Nu heb ik een scriptje (zie openingspost) welke automatisch kan inloggen op afgeschermde pagina's met gebruikersnaam en wachtwoord en daarna een csv of xml bestand kan downloaden.
Zolang ik rechtstreeks naar een csv of xml file verwijs werkt dat prima en download hij bestand en slaat hij onder ingestelde naam op op locatie van mijn keuze.
Maar nu heb ik dus geen rechtstreekse url van bestand maar een url dat automatisch laatste versie van bestand opzoekt en download. en daar zit hem dus het probleem in.
bedankt voor je reactie.
ik heb beide zinnen aan script toegevoegd.
script ziet er nu als volgt uit:
<?php
$remotefile = 'http://url.nl/wp-admin/admin.php?page=pmxe-admin-manage&id=1&action=get_file&_wpnonce=9caaead0e3';
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$localfile = '/home/wns/domains/url.nl/public_html/feeds/beslist-test.csv'; // <-- Change this to an existing directory where to store the xml file
// This file is needed to save the session cookie
$scalacookie ='tmp/shopcookie.txt'; // <-- Change this to an existing directory to store a temporary file containing the cookie (cookie jar)
$loginUrl = "http://url.nl/wp-admin";
// User name and password to login the website, a separate account can be create for this.
$user = 'username'; // <-- put your login here
$pw = 'password'; // <-- put your password here
//init curl
$ch = curl_init();
//Set the URL to work with
curl_setopt($ch, CURLOPT_URL, $loginUrl);
// ENABLE HTTP POST
curl_setopt($ch, CURLOPT_POST, 1);
//Set the post parameters
curl_setopt($ch, CURLOPT_POSTFIELDS, 'login_email='.$user.'&login_password='.$pw);
//Handle cookies for the login
curl_setopt($ch, CURLOPT_COOKIEJAR, $shopcookie);
//Setting CURLOPT_RETURNTRANSFER variable to 1 will force cURL
//not to print out the results of its query.
//Instead, it will return the results as a string return value
//from curl_exec() instead of the usual true/false.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//execute the request (the login)
$store = curl_exec($ch);
//the login is now done and you can continue to get the
//protected content.
//set the URL to the protected file
curl_setopt($ch, CURLOPT_URL, $remotefile);
//execute the request
print_r(curl_getinfo($ch));
$content = curl_exec($ch);
// close session
curl_close($ch);
//save the data to disk
file_put_contents($localfile, $content);
?>
bestand is echter nog steeds leeg nadat aangemaakt is.
De e-mail die ik krijg na uitvoeren van cron-job bevat het volgende:
--2015-09-07 11:30:01-- http://url.nl/feeds/feed-download.php
Resolving url.nl... 62.84.241.117 Connecting to url.nl|62.84.241.000|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 980 [text/html]
Saving to: `/dev/null'
ben je nu middels curl een bestand van de ene map naar de andere map aan het kopieren binnen dezelfde document root?
[size=xsmall]Toevoeging op 07/09/2015 13:59:17:[/size]
* maak een simpel script dat de dynamische filename nabootst
* doe dat zonder het stuk http://..../ maar gebruik het echte path op de server
* php kan nu dat bestand benaderen, zonder password
* copy file naar beoogde locatie.
alternatief is bijna gelijk:
gebruik een rewrite rule om het niet gevonden bestand beslist-test.csv om te schrijven naar
leeshet.php
in leeshet.php doe je hetzelfde als ik hierboven zeg voor de bestandsnaam
ipv copy doe je
header('Content-Type: application/csv'); // of iets dergelijks
fpasstrhu($file);
dat heeft als voordeel dat de file ook op te halen is als jouw scriptje nog niet gekopieerd heeft
maar als nadeel, dat als de nieuwe file er een dag niet is, ook de file van gisteren niet vanzelf gegeven wordt. (op te lossen door in je script dan alsnog naar een dag eerder te kijken)
ik probeer inderdaad een bestand op dezelfde server naar een andere plek te kopiƫren.
Enkel wisseld de naam en directory waar het bestand staat dus steeds en wil ik het onder een andere vaste naam opslaan.
Ik heb zelf 0,0 verstand van programmeren dus zal toch verder hulp moeten gaan inhuren om dit voor elkaar te krijgen
dat script welke ik nu probeerde te gebruiken was eigenlijk ook voor het ophalen van een feed vanaf een heel andere website welke achter een login staat.
Zo gebruik ik dat script in elkgeval op andere sites van me.