Récupérer un argument passé en shell_exec dans un fichier js

WRInaute impliqué
Bonjour,

je me permet de vous solliciter car j'ai un petit soucis. En effet lors de l’exécution d'une commande shell je souhaite rajouter quelques arguments à la ligne de commande, mais je ne sais pas comment récupérer ces arguments dans le fichier js appelé pour m'en servir.

Voici le code php :

PHP:
<?php
 
$result = shell_exec('cheminversfichierjs test.js argument1 argument2');
 
?>

Merci de votre aide
 
WRInaute impliqué
Merci

par contre ce qui est étonnant c'est que ma ligne shell dans mon fichier php ne fonctionne absolument pas et pourtant le chemin est bien correct.

Voici la ligne :

Code:
shell_exec('node /var/www/html/test7.js argument');

Dans PuTTY

Cela fonctionne :
root@vps-37795:/var/www/html# node test7.js argument

Je ne comprends ce qui pose problème.
 
WRInaute accro
C'est tjs pas clair.
Page blanche = erreur 500 ou le retour de shell_exec est NULL (var_dump est ton ami) ?
 
WRInaute impliqué
Je comprends pas. J'ai tout essayé ce ne fonctionne toujours pas.

Voici le code JS (test7.js)

Code:
    const request = require('../../../root/node_modules/request');
    
    const args = process.argv;

    var self = this;
    return new Promise(
    
    
    function(resolve, reject) {
        request.get({
            
uri: "https://api.leboncoin.fr/finder/classified/" + process.argv[2],
            
            
headers: {
                "origin": "https://www.leboncoin.fr",
                "api_key": "ba0c2dad52b3ec",
                "content-type": "text/plain;charset=UTF-8",
                "accept": "*/*",
                "referer": "https://www.leboncoin.fr/annonces/offres/ile_de_france/",
            }
        }, function (err, res) {
            if(err) {
                return reject(err);

            }
            var entry = JSON.parse(res.body);

            var price = entry.price ;

            if(entry.price != null){ //SI ANNONCE ENCORE ACTIVE
                
                var XMLHttpRequest = require("/root/node_modules/xmlhttprequest").XMLHttpRequest;

                xhr = new XMLHttpRequest()
                xhr.open("POST", "/traitement2.php", true)
                xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                xhr.send("var="+process.argv[2]);
            }

            console.log(price);

        });
    });



Code php :

PHP:
$out = shell_exec('node /var/www/html/test7.js 1491910691').PHP_EOL;
var_dump($out);

Sachant qu'en passant par PuTTY cette ligne de commande fonctionne parfaitement :

root@vps-37795:/var/www/html# node test7.js 1491910691

Je ne vois pas d'ou vient le problème. Pour info var_dump retourne constamment :string(1) " "
 
WRInaute impliqué
Si je modifie le fichier test7.js comme ceci :

Code:
    const request = require('/root/node_modules/request');
    
    const args = process.argv;
    
    console.log(process.argv[2]);

le var_dump me renvoi toujours string(1) " "

Mais si je le modifie comme ceci j'ai un retour.

Code:
    const args = process.argv;
    
    console.log(process.argv[2]);

En quoi le premier const pose problème ?
 
WRInaute impliqué
le problème c'est que si je ne met pas le path, j'ai une erreur dans la console :

Error: Cannot find module 'request'

pour information test7.js se trouve dans : /var/www/html
 
WRInaute impliqué
Quand c'est pas request qui déconne c'est le shell_php :

Code php :

PHP:
$out = shell_exec('node /root/test/test7.js 1491910691 2>&1');
var_dump($out);

Voici ce que cela me donne :

string(324) "module.js:550 throw err; ^ Error: Cannot find module '/root/test/test7.js' at Function.Module._resolveFilename (module.js:548:15) at Function.Module._load (module.js:475:25) at Function.Module.runMain (module.js:694:10) at startup (bootstrap_node.js:204:16) at bootstrap_node.js:625:3 "

Pourant une nouvelle fois dans la console PuTTY cette ligne fonctionne parfaitement : node /root/test/test7.js 1491910691

Je ne comprends pas le problème, comment ne trouve t-il pas le module alors que le chemin est correct ?

Je précise que le shell_exec se trouve dans : /var/www/html/traitement.php
 
WRInaute accro
Ton script traitement.php n'a probablement pas accès à /root/test/test7.js vu que PHP ne tourne pas en root (par défaut du moins).
 
WRInaute impliqué
Non en effet, les 2 chemins sont totalement différent. Il y a pas une solution pour palier à ce problème et faire en sorte que l'accès soit possible ?
 
WRInaute impliqué
Dans ce cas c'est le script JS qui pose problème car il n'a plus accès à request :

Cette ligne ne fonctionne pas :
const request = require('/root/node_modules/request');

Toujours un problème d'accès à root meme si je met le script JS dans /var/www/
 
WRInaute accro
Ben oui, "node_modules" doit être dans le répertoire courant.
Comme qd tu as fait le npm install request depuis /root/.

Donc met toi dans le répertoire du script PHP, et refait le npm install request.
 
Discussions similaires
Haut