Page 1 sur 1

un exec trop grand ?

Posté : 17 oct. 2008, 19:46
par katagoto
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 ;)

Posté : 17 oct. 2008, 20:45
par Calimero
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.

Posté : 18 oct. 2008, 11:11
par katagoto
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...

Posté : 20 oct. 2008, 19:35
par katagoto
Up, j'ai essayé avec cd, rien ne change :/ quelqu'un sait pourquoi ?

Par avance merci de votre aide

Posté : 21 oct. 2008, 10:06
par caroube
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 "'...

Posté : 21 oct. 2008, 13:33
par katagoto
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é...

Posté : 21 oct. 2008, 16:08
par caroube
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++ ?

Posté : 21 oct. 2008, 16:31
par katagoto
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

Posté : 23 oct. 2008, 14:04
par Hywan
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.

Posté : 23 oct. 2008, 16:58
par katagoto
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