Exec via php

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Innovatieve, nauwkeurige Senior PHP Developer voor

Eind jaren ’90 is dit bedrijf opgericht. Ze hebben zich altijd beziggehouden met het ontwikkelen van software voor overheidsinstanties. Dit zijn instanties waaronder bijvoorbeeld ook onder andere : de belastingdienst, burgerszaken, verschillende bedrijven, notarissen, incassobureau’s en ook nog bewindvoerders. Momenteel tellen ze 20 medewerkers, waarvan 2/3 deel allemaal developers zijn. Doordat ze de enigste aanbieder van dit soort software op de markt zijn, groeien ze erg hard. Door de enorme groei, hebben ze dan ook concrete groeiplannen in het verschiet. Functie-omschrijving Het bedrijf wordt door allerlei instanties ingeschakeld. Tegenwoordig wordt alles digitaal geregeld en gezien de essentie van dit soort

Bekijk vacature »

Daniel van Seggelen

Daniel van Seggelen

27/11/2018 06:51:10
Quote Anchor link
Ik heb een script wat via affiliate netwerken datafeeds download en inlees.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$file = file_get_contents($_POST['url']);


Dit werkt primavia shell, maar via php blijft de string leeg.

Ik krijg als error : "failed to open stream: No such file or directory in ......"

De link begint met http://blabla

Nogmaals in de shell werkt dit, wat is hier verkeerd aan?

als ik via php een exec wil laden met allow_url_fopen on
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
exec('php'. DOC_ROOT.'shopconnector/download.php?feedId='.$_POST['id'], $output, $return_var);


waar ik $file = file_get_contents($q['url']); probeer te laden, maar niks werkt, zelfs met alles 777 rechten.

Hoe kan ik dit debuggen?

groet

Daniel
 
PHP hulp

PHP hulp

17/12/2018 21:44:50
 
- Ariën -
Beheerder

- Ariën -

27/11/2018 10:32:59
Quote Anchor link
Gezien je error ga ik ervan uit dat er een bepaalde bestand wat je includeert in je script, niet gevonden kan worden.

Als je met scripts in de cron/shell werkt, dan zou je een volledig pad moeten gebruiken bij includes.
Een cronjob draait niet vanuit de directory waar je website staat, dus mogelijk zal deze je geincludeerde bestand in zijn eigen directory zoeken. In de shell zou zo iets soortgelijks ook gelden.

Voor CLI-scripts (Command Line Interface) gebruik ik altijd dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$base
= dirname(dirname(__FILE__));
include_once $base . '/lib/db.inc.php';
// voer hier de rest uit.
?>
Gewijzigd op 27/11/2018 10:34:23 door - Ariën -
 
Daniel van Seggelen

Daniel van Seggelen

27/11/2018 11:33:10
Quote Anchor link
Ik gebruikte wel de volledige paden, maar het lijkt erop dat het via de affiate websites niet altijd werk. gogole.nl weer wel.
 
- Ariën -
Beheerder

- Ariën -

27/11/2018 12:08:24
Quote Anchor link
Is er verschil in http en https in de URL?
 
Daniel van Seggelen

Daniel van Seggelen

27/11/2018 13:15:31
Quote Anchor link
geen verschil
 
Ben van Velzen

Ben van Velzen

27/11/2018 13:23:28
Quote Anchor link
Wacht, probeer je via exec een lokaal pad uit te voeren als url? Dat kan natuurlijk niet.
 
Daniel van Seggelen

Daniel van Seggelen

27/11/2018 13:36:03
Quote Anchor link
niet als uri

als eerste probeerde ik gewoon dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$file = file_get_contents($q['url']);
$r = file_put_contents(DOC_ROOT.'shopconnector/feeds/feed'.$_GET['feedId'].'import.csv', $file);


file is hier leeg, maar via de shell werkt dit script wel, de paden zijn correct.
nu probeer ik het via PHP met de shell te laden

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
    $file = shell_exec('/usr/bin/php /home/admin/domains/verg/private_html/shopconnector/download.php '.$id.'');

download.php
$file = file_get_contents($q['url']);
$r = file_put_contents(DOC_ROOT.'shopconnector/feeds/feed'.$_GET['feedId'].'import.csv', $file);



Toevoeging op 27/11/2018 13:53:54:

update, met wget in shell of php werkt het ook niet (ERROR 400 bad request), maar vreemdgenoeg werkt de het wel met file_get_contents via de shell.



Toevoeging op 27/11/2018 13:55:08:

Resolving df.zanox.com (df.zanox.com)... 195.216.249.113
Connecting to df.zanox.com (df.zanox.com)|195.216.249.113|:80... connected.
HTTP request sent, awaiting response... 400 Bad Request
2018-11-27 13:54:43 ERROR 400: Bad Request.
Gewijzigd op 27/11/2018 13:37:34 door Daniel van Seggelen
 
Thomas van den Heuvel

Thomas van den Heuvel

27/11/2018 16:15:21
Quote Anchor link
Euh, ik denk dat het misgaat met de argumenten. $id zit waarschijnlijk niet in $_GET, maar kan opgehaald worden met $argv.

Los daarvan $_GET['feedId'] bestaat sowieso niet - je geeft die querystringparameter nergens die naam.

Er zijn ook andere smaken beschikbaar.

2 minuten Googlen met "php exec local script with querystring parameters", eerste resultaat

Of je gebruikt dus php-cgi indien beschikbaar.
Gewijzigd op 27/11/2018 16:17:05 door Thomas van den Heuvel
 
Daniel van Seggelen

Daniel van Seggelen

28/11/2018 00:21:36
Quote Anchor link
De argumenten zijn geen probleem en komen ook gewoon door en aonder argumenten hetzelfde.

de server is een VPS centos 7.

feedId bestaat niet, maar de argumenten zijn op deze wijze benaderbaar:

download.php
$_GET['feedId'] = $argv[1];

Maar snap er niks van, waarom het neit werkt, ik wil gewoon een previe van een feed laten zien van maximaal 300 karakters, om te testen of de feeds wel werken of niet etc.

groet

Daniel
 
Thomas van den Heuvel

Thomas van den Heuvel

28/11/2018 14:26:02
Quote Anchor link
Je snapt niet waarom het niet werkt omdat je niet weet waar het misgaat.

Je zult dus stap voor stap moeten gaan kijken waar het spaak loopt.

Heb je je errorlogs geraadpleegd? Want nu zit je een beetje tegen een black box aan te turen - sja geen wonder dat je dan niet weet wat er gebeurt.

Desnoods breng je logging aan in het script zelf, zodat je ook "getuigen" hebt van de actuele waarden van variabelen.

Of je maakt dus eerst een normaal werkend script, en schrijft dit dan om naar een shellscript. Wederom stap voor stap, anders ben je inderdaad blind aan het programmeren.
Gewijzigd op 28/11/2018 19:03:56 door Thomas van den Heuvel
 



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.