Exec via php
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)
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
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)
1
2
3
4
5
2
3
4
5
<?php
$base = dirname(dirname(__FILE__));
include_once $base . '/lib/db.inc.php';
// voer hier de rest uit.
?>
$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 -
Ik gebruikte wel de volledige paden, maar het lijkt erop dat het via de affiate websites niet altijd werk. gogole.nl weer wel.
Is er verschil in http en https in de URL?
geen verschil
Wacht, probeer je via exec een lokaal pad uit te voeren als url? Dat kan natuurlijk niet.
als eerste probeerde ik gewoon dit:
Code (php)
1
2
2
$file = file_get_contents($q['url']);
$r = file_put_contents(DOC_ROOT.'shopconnector/feeds/feed'.$_GET['feedId'].'import.csv', $file);
$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)
1
2
3
4
5
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);
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
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
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
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