un exec trop grand ?

Mammouth du PHP | 1668 Messages

17 oct. 2008, 19:46

Bonjour à toutes et à tous,

Ca faisait longtemps que j'avais pas fait un nouveau topic, ça me rappel ma jeunesse, bref

J'ai fait dernièrement, enfin, j'ai mit 3 mois avant que ça compile, un programme en C++, naturellement, j'ai voulu le tester avec PHP, avec exec dans un premier temps...

Voilà mon code :
<?php
$d = microtime(true);
echo exec("\"D:\\cpp\\Exercices\\MonProg\\bin\\Debug\\MonProg.exe\" cpp \"".escapeshellarg(file_get_contents("cpp.cpp"))."\"");
echo "<p>Temps :".(microtime(true)-$d);
L'erreur est la suivante :
Warning: exec() [function.exec]: Unable to fork ["D:\_X\cpp\Exercices\KolorEngine\bin\Debug\KolorEngine.exe" cpp ""#define P_IT(x,y) do_print_it(#x = y d s \n ,x,__LINE__,__FILE__); //#define midget printf*/ #define midget do_print_it #define _DEBUG_ 1 /* ÕÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͸ ³ 11/05/02 Added F11 hide the bars. But although it hides the bars, the screen cannot be made ³ ³ bigger to go over where the bars were... ³ ³ 11/07/02 TODO: ³ ³ 1. put file selection in something general. ³ ³ 2. Figure out the key code again... ³ Ã----------------------------------------------------------------------------------- in C:\wamp\www\test\kolorengine.php on line 3

Temps :0.019139051437378
Une partie de cpp.cpp, est affiché comme vous le voyez...

J'aimerais savoir d'où vient le problème, et, si possible, comment le résoudre...

Par avance merci de votre aide

NB : cpp.cpp pèse plus de 110 Ko, je voulais voir ce que mon programme avait dans le ventre ;)
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

ViPHP
ViPHP | 2287 Messages

17 oct. 2008, 20:45

Tu as essayé de passer ton message d'erreur à Google ? (c'est la première des choses à faire).

A priori il donne pas mal de résultats.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Mammouth du PHP | 1668 Messages

18 oct. 2008, 11:11

Y a un truc de bizzard là...

Quand je met ça :
<?php
$d = microtime(true);
echo exec("\"d:/_X/cpp/Exercices/KolorEngine/bin/Debug/KolorEngine.exe\" cpp \""./*escapeshellarg(file_get_contents("cpp.cpp")).*/"\"");
echo "<p>Temps :".(microtime(true)-$d);
ça marche, quelqu'un peut m'expliquer ?

Par avance merci de votre aide

NB : que je dis ça marche, je veux dire, il n'y a plus d'erreur affichée...
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Mammouth du PHP | 1668 Messages

20 oct. 2008, 19:35

Up, j'ai essayé avec cd, rien ne change :/ quelqu'un sait pourquoi ?

Par avance merci de votre aide
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Eléphant du PHP | 422 Messages

21 oct. 2008, 10:06

Visiblement, tu as un programme qui prend des arguments, lesquels sont lus dans un fichier.

Je te propose de debugger ça en trois étapes :
1) tu valides que tu peux exécuter le programme sans argument
2) tu valides que tu peux exécuter le programme avec un argument en dur
3) tu passes à ta syntaxe complète avec lecture de l'argument dans le fichier

Cela te permettra déjà de savoir où se trouve le problème.

Autre truc : avec PHP tu peux utiliser indifféremment ' ou " pour encadrer les chaînes, notamment quand tu as des ' ou des " dans la chaîne. Au moins, ça rend plus lisible donc plus facile à debugger.
echo exec('"D:\\cpp\\Exercices\\MonProg\\bin\\Debug\\MonProg.exe" cpp "'...

Mammouth du PHP | 1668 Messages

21 oct. 2008, 13:33

Merci de ton aide :

1) (sans arguments), bon déjà ça plante, puisque j'ai conçut mon programme pour qu'il me renvoi un message d'erreur

2) pas de message d'erreur, mais rien ne s'affiche

3) j'ai même pas essayé...
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Eléphant du PHP | 422 Messages

21 oct. 2008, 16:08

Etape 1 : ça plante ou ça affiche une erreur ? Afficher une erreur, ce n'est pas "planter".
Est-ce que le fork se fait ?

Etape 2 : avec un argument en dur, rien ne s'affiche. Mais que doit afficher ton programme ? Quand tu lances en direct dans une ligne de commande, qu'affiche t'il ? Est-ce que c'est la même chose quand tu fais un exec en php avec ces mêmes arguments ?

Etape 3 : tu n'as pas essayé ??? ton kolorengine.exe cpp file_get_contents ... c'est bien la lecture de l'argument dans un fichier ? C'est bien là que tu as un problème ?

Mais est-ce que tu es sûr que c'est un problèmede PHP ou un problèmede C++ ?

Mammouth du PHP | 1668 Messages

21 oct. 2008, 16:31

1) Quand je dis que ça plante, c'est que ça n'affiche venant de mon programme, alors que, j'ai fait en sorte que lorsqu'il y a un manque d'arguments il m'affiche un message, là, rien

2) Lorsque je le test (via std::cin, pour les connaisseurs) ça marche niquel, deplus j'ai activé le mode débug...

3) Bah, pourquoi essayé si ça ne marche pas aux deux étapes précédentes...

J'en suis quasiment sûr, car, quoi qu'il arrive, mon programme renvoit du texte...

Par avance merci de votre aide
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

ViPHP
ViPHP | 4674 Messages

23 oct. 2008, 14:04

Hey :),

Moi j'ai rien compris. Il fait quoi ton programme au juste ? KolorEngine a comme argument cpp et le contenu du fichier cpp.cpp c'est ça ? Passer le contenu d'un fichier en paramètre c'est un peu … sale. Soit tu le passes via un pipe (ça existe ça dans le DOS ?), ou alors tu passes le nom du fichier, mais pas son contenu. Tu risques d'avoir trop de problèmes.
Donc :

Code : Tout sélectionner

$ KolorEngine --type cpp File.cpp
serait préférable je pense. Sinon :

Code : Tout sélectionner

cat File.cpp | KolorEngine --type cpp
et ici tu te bases sur la lecture du flux standard d'entrées (STDIN).

Essaye d'obtenir un tel comportement.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Mammouth du PHP | 1668 Messages

23 oct. 2008, 16:58

A la base, je veux faire, ne vous moquez pas et je veux pas de remarque si je veux réinventer la roue ça me regarde, un colorateur syntaxique (type pygments, pour les connaisseurs...) en C++, dans le nut d'obtenir de meilleurs performances (si je le passe en extension PHP, il ne devrait pas y avaoir de soucis) et, à défaut, un plus grand contrôle...
Bref, ma solution bancale devait être un truc immédiat, pas besoin d'enregistrer les bout de codes des membres dans des fichiers pour ensuite les reprendre... Imaginné qu'il y ait 4-5 codes dans la mêmes pages, je vous dit pas la galère...
Moi je vais aller chercher un tuto sur les extensions PHP...

++

Merci à tous
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol