downloaden bestand naar server script

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Daniel Feenstra

Daniel Feenstra

21/07/2017 09:32:22
Quote Anchor link
Goedendag,
Om te beginnen: ik weet (vrijwel) niks van programmeren.

Ik gebruik al paar jaar een script voor het downloaden van bestanden vanaf de website van leverancier naar mijn eigen server. dit script laat ik via cronjobs uitvoeren. Bij deze leverancier moest echter ingelogd worden voor het bestand gedownload kon worden.
Dit script is als volgt:
Quote:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php

    
    $remotefile
= 'http://map.website.nl/csv/csv-voorraad.csv';
    $localfile = '/home/u1667y88765/domains/mijnsite.nl/public_html/files/voorraad-leverancier.csv'; // <-- Change this to an existing directory where to store the xml file
        
    // This file is needed to save the session cookie

    $scalacookie ='tmp/leveranciercookie.txt'; // <-- Change this to an existing directory to store a temporary file containing the cookie (cookie jar)
      
    $loginUrl = "https://www.websiteleverancier.nl/login.html";
    
    // User name and password to login the wholesale website, a separate account can be create for this.
    $user = '[email protected]'; // <-- 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, $scalacookie);

    //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);

?>


dit werkt voor 1 leverancier dus prima.

Nu wil ik dus voor andere leverancier gebruiken.
Maar als ik zelf wil inloggen moet ik inloggen op https://www.websiteleverancier.nl/login.html
maar het gewenste bestand moet ik downloaden vanaf http://map.website.nl/csv/csv-voorraad.csv en daar is dus geen gebruikersnaam en wachtwoord voor nodig.
Als ik nu via cron dat script uitvoer krijg ik een csv bestand met daarin het volgende:

Quote:
<html>
<head><title>405 Not Allowed</title></head>
<body bgcolor="white">
<center><h1>405 Not Allowed</h1></center>
<hr><center>nginx</center>
</body>
</html>


login gegevens kloppen.
Nu is bovenstaande doordat niet ingelogd hoeft te worden waarschijnlijk zo en zo veel te uitgebreid dus had ik op google gezocht naar ander script voor downloaden van een bestand via php. darabij kwam ik het volgende tegen:

Quote:
#!/usr/bin/php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php         $data = @file("http://map.website.nl/csv/csv-voorraad.csv");         $lf = "/home/u1667y88765/domains/mijnsite.nl/public_html/files/voorraad-leverancier.csv";         $fh = fopen($lf, 'w');         fwrite($fh, $data[0]);         fclose($fh); ?>


Maar als ik die start via een cronjob gebeurd er helemaal niks. word geen file voorraad-leverancier.csv aangemaakt.

wie kan me vertellen hoe ik dit probleempje kan oplossen zodat ook zonder in te loggen dat bestand naar mijn server gedownload wordt?
Groet

Daniel
 
PHP hulp

PHP hulp

20/04/2024 13:18:47
 
- Ariën  -
Beheerder

- Ariën -

21/07/2017 09:38:50
Quote Anchor link
Haal het @'je eens erg. Zie je bepaalde foutmeldingen?
 
Daniel Feenstra

Daniel Feenstra

21/07/2017 10:10:00
Quote Anchor link
ik heb de @ verwijderd in laatste scriptje.
en even meldingen van cron aangezet.
Krijg de volgende melding in mijn e-mail van de cronjob:

HTTP request sent, awaiting response... 500 Internal Server Error
2017-07-21 10:06:01 ERROR 500: Internal Server Error.
 
- Ariën  -
Beheerder

- Ariën -

21/07/2017 10:13:16
Quote Anchor link
Dan is er iets mis met het script die jij oproept in je cron.
 
Daniel Feenstra

Daniel Feenstra

21/07/2017 10:20:11
Quote Anchor link
ohhhh shame on me....
had dubbele
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php  en ?>


Nu nogmaals geprobeerd met en zonder de @.
Nu wordt er in beide gevallen wel een csv file aangemaakt op de goede plek.
Maar er staan in dat bestand maar 1 regel terwijl als ik file handmatig aanroep er 10.000 regels instaan.
 
- Ariën  -
Beheerder

- Ariën -

21/07/2017 10:23:11
Quote Anchor link
Klopt, je doorloopt de csv niet, maar het alleen de eerste regel als element op.
 
Daniel Feenstra

Daniel Feenstra

21/07/2017 10:26:26
Quote Anchor link
dat zit hem kennelijk in het volgende stukje:

fwrite($fh, $data[0]);

als ik daar 0 verander in 10 download hij een andere regel.
Hoe kan ik aangeven dat hij gewoon de hele file moet downloaden ongeacht aantal regels?
 
Thomas van den Heuvel

Thomas van den Heuvel

21/07/2017 10:49:30
Quote Anchor link
Ook hier kan cURL uitkomst bieden, en voor grotere bestanden moet je misschien wat extra's doen.
 
- Ariën  -
Beheerder

- Ariën -

21/07/2017 11:04:40
Quote Anchor link
Met while() of foreach() doorlopen.
 
Daniel Feenstra

Daniel Feenstra

21/07/2017 11:06:58
Quote Anchor link
het is gelukt :-)
het bestand wordt nu keurig op mijn server opgeslagen. maakt de verwerking bijna 3 keer sneller als dat ik het verwerken van bestand vanaf de url van leverancier zelf deed.

Toevoeging op 21/07/2017 11:07:19:

Bedankt dus:-)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.