PHP langage Multiplateforme ?

Mammouth du PHP | 2278 Messages

04 août 2012, 12:27

Autre façon de dire la même chose:
Le code purement PHP sera toujours exécuté, et c'est bien pour cette raison qu'il existe, heureusement, une commande PHP qui fait le boulot pour la majorité des fonctions de fichiers d'un système, mais curieusement, ni ls d'Unix, ni dir de Dos.

Mais c'est vrai que, par exemple, exec ("mysqldump") fonctionnera sous unix, alors que je ne suis pas sûr qu'il ne faille pas passer exec("mysqldump.exe") pour que ca fonctionne chez micromou.
Ça aboutit à du php qui fait parfaitement son boulot, mais dont il faut prévoir quelque chose du genre
function dumpe (parametres)
{
   switch (PLATE_FORME) // constante définie par ailleurs
   {
        case "WIN":
       break;
      case "NUNUX":
       break;
   }
}
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Jeanphi
Invité n'ayant pas de compte PHPfrance

07 août 2012, 18:13

Merci pour vos réponses!

Ryle, je comprends parfaitement ta définition de "multi-plateforme", même si la commande système est un cas un peu particulier. J'aimerais développer proprement en PHP, de manière indépendante de la machine qui supporte l'application, mais c'est visiblement sans espoir.

Hyman, j'essaierai dès demain DIRECTORY_SEPARATOR, car je me retrouve sur le nouveau serveur web IIS déployé par mon administrateur bureautique, avec des chemins mêlant \ (issus de la variable $_SERVER['ROOT_DIRECTORY'] ) et des / codés dans l'application PHP. Sur l'ancien serveur IIS (dont je n'étais pas administrateur non plus), cela fonctionnait très bien sans que je m'en soucie. A moins d'indiquer à mon administrateur bureautique ce qui ne va pas dans la configuration du serveur, il faut que j'adapte le code.

Sirakawa, quelque chose m'interpelle : pourquoi je ne parviens pas à créer mes propres chemins absolus dans mon application PHP ? Il semble que j'aie toujours besoin de connaître le vrai PATH de la machine sur laquelle mon appli PHP est installée (ex : C:\www\mon_appli ) et la compléter par l'arborescence de mon appli pour que cela fonctionne, à moins de mettre des chemins relatifs (ex : ../../config/config.php), et je ne trouve pas cala très beau. D'après ce que je lis un peu partout, en écrivant "/répertoire/fichier", le serveur PHP devrait comprendre que je suis dans le root directory de mon application PHP, non ?

ViPHP
ViPHP | 4674 Messages

07 août 2012, 23:16

Hello,

Tu peux écrire du code PHP indépendant de la plateforme. Après tout, on utilise rarement des commandes systèmes (parce que c'est lent d'une part et parce que c'est très particulier d'autre part).

Écrire DIRECTORY_SEPARATOR est un peu long. Souvent on utilise l'alias suivant :
define('DS', DIRECTORY_SEPARATOR);
Et hop, tu pourras utiliser DS.

Enfin, si tu veux écrire des chemins absolus, tu peux utiliser la fonction getcwd() (get current working directory), équivalente de pwd si tu fais du système. Ça te donnera le chemin du fichier couramment exécuté, et non pas du fichier dans lequel tu es (sauf si c'est celui qui est exécuté ;)). Par exemple :
// /tmp/test/index.php
require 'a/b/c/d.php';

// /tmp/test/a/b/c/d.php
echo getcwd(), "\n";
Si tu exécutes index.php, tu auras /tmp/test normalement. Ça va te permettre de construire des chemins absolus.
Sinon, tu peux aussi regarder du côté de realpath().
« 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).

ViPHP
ViPHP | 2577 Messages

08 août 2012, 09:08

Bonjour,

Pour tout ce qui est include et fonctions semblable, le plus simple est de se reposer sur l'include_path qui permet de rechercher les fichiers dans un ou plusieurs répertoires paramétrer.

Une autre possibilité est de stocker dans une constante les répertoires utiles à l'application et d'utiliser cette constante pour les accès.

Jeanphi
Invité n'ayant pas de compte PHPfrance

08 août 2012, 14:36

Que de possibilités! Merci pour votre aide. Je les retiens toutes deux. J'aime beaucoup le principe de getcwd(). Je me méfie un peu d'un include_path si plusieurs fichiers portent le même nom en deux endroits de l'arborescence (on ne sait plus lequel est choisi en premier, et on galère si on veut le deuxième).