« Programmation PHP/PEAR » : différence entre les versions

Un livre de Wikilivres.
Contenu supprimé Contenu ajouté
DannyS712 (discussion | contributions)
m <source> -> <syntaxhighlight> (phab:T237267)
Ligne 19 : Ligne 19 :
Se connecter à une base de données revêt la syntaxe suivante :
Se connecter à une base de données revêt la syntaxe suivante :


<source lang=php>
<syntaxhighlight lang=php>
require_once('DB.php'); // Indispensable
require_once('DB.php'); // Indispensable


Ligne 34 : Ligne 34 :
echo "Erreur : ".$db->getMessage();
echo "Erreur : ".$db->getMessage();
}
}
</syntaxhighlight>
</source>


Il est également possible de remplacer la chaîne de caractères par un tableau contenant vos informations :
Il est également possible de remplacer la chaîne de caractères par un tableau contenant vos informations :


<source lang=php>
<syntaxhighlight lang=php>
$dsn = array(
$dsn = array(
'phptype' => 'mysql',
'phptype' => 'mysql',
Ligne 46 : Ligne 46 :
'database' => 'tests',
'database' => 'tests',
);
);
</syntaxhighlight>
</source>


Vous êtes donc connectés à votre base de données. Il s'agit maintenant d'effectuer des opérations avec celle-ci.
Vous êtes donc connectés à votre base de données. Il s'agit maintenant d'effectuer des opérations avec celle-ci.
Ligne 55 : Ligne 55 :
Voici donc le code détruisant la connexion :
Voici donc le code détruisant la connexion :


<source lang=php>
<syntaxhighlight lang=php>
$db->disconnect();
$db->disconnect();
</syntaxhighlight>
</source>




Ligne 64 : Ligne 64 :
Une fois connecté, vous allez pouvoir envoyer des requêtes à votre BDD comme suit :
Une fois connecté, vous allez pouvoir envoyer des requêtes à votre BDD comme suit :


<source lang=php>
<syntaxhighlight lang=php>
$query = "SELECT * FROM table WHERE id=5";
$query = "SELECT * FROM table WHERE id=5";
$rsc = $db->query($query);
$rsc = $db->query($query);
</syntaxhighlight>
</source>


=== Récupérer des informations ===
=== Récupérer des informations ===
Ligne 73 : Ligne 73 :
Comme avec n'importe quelle base de données, vous aurez à récupérer le résultat de votre requête. Voici une fonction équivalente de <code>mysql_fetch_array()</code> :
Comme avec n'importe quelle base de données, vous aurez à récupérer le résultat de votre requête. Voici une fonction équivalente de <code>mysql_fetch_array()</code> :


<source lang=php>
<syntaxhighlight lang=php>
$query = "SELECT * FROM table WHERE id=5";
$query = "SELECT * FROM table WHERE id=5";
$rsc = $db->query($query);
$rsc = $db->query($query);
Ligne 84 : Ligne 84 :
echo $result['id']."\n";
echo $result['id']."\n";
}
}
</syntaxhighlight>
</source>


== MDB2 ==
== MDB2 ==
Ligne 97 : Ligne 97 :


Pour l'utiliser :
Pour l'utiliser :
<source lang=php>
<syntaxhighlight lang=php>
include "Spreadsheet/Excel/Writer.php;
include "Spreadsheet/Excel/Writer.php;
</syntaxhighlight>
</source>


=== Limites ===
=== Limites ===
Ligne 108 : Ligne 108 :
== phpDocumentor ==
== phpDocumentor ==
Ce générateur de documentation analyse aussi le code. Ainsi, on peut décrire dans l'annotation qui précède une méthode, les types de ses arguments ou de son résultat<ref>https://www.phpdoc.org/</ref> :
Ce générateur de documentation analyse aussi le code. Ainsi, on peut décrire dans l'annotation qui précède une méthode, les types de ses arguments ou de son résultat<ref>https://www.phpdoc.org/</ref> :
<source lang=php>
<syntaxhighlight lang=php>
/**
/**
* @param bool $condition
* @param bool $condition
Ligne 114 : Ligne 114 :
* @return String|null
* @return String|null
*/
*/
</syntaxhighlight>
</source>
Une méthode qui hérite d'une autre peut aussi hériter de sa doc :
Une méthode qui hérite d'une autre peut aussi hériter de sa doc :
@inheritdoc
@inheritdoc
Ligne 120 : Ligne 120 :
== PECL ==
== PECL ==
{{w|PECL}} (prononcé "pickle", pour ''PHP Extension Community Library''), est un gestionnaire de paquets. Exemples :
{{w|PECL}} (prononcé "pickle", pour ''PHP Extension Community Library''), est un gestionnaire de paquets. Exemples :
<source lang=bash>
<syntaxhighlight lang=bash>
sudo pecl install memcached
sudo pecl install memcached
sudo pecl install redis
sudo pecl install redis
Ligne 128 : Ligne 128 :
sudo pecl install igbinary
sudo pecl install igbinary
sudo pecl install imagick
sudo pecl install imagick
</syntaxhighlight>
</source>


Pour désinstaller :
Pour désinstaller :
<source lang=bash>
<syntaxhighlight lang=bash>
sudo pecl uninstall memcached
sudo pecl uninstall memcached
</syntaxhighlight>
</source>


{{attention|1=Sur un serveur avec plusieurs versions de PHP actives, il peut être nécessaire de préciser sur laquelle installer le paquet au préalable<ref>https://github.com/Homebrew/homebrew-core/issues/26108</ref>. Sinon l'erreur suivante survient : ''Unable to load dynamic library 'memcached.so'''. Plusieurs solutions :
{{attention|1=Sur un serveur avec plusieurs versions de PHP actives, il peut être nécessaire de préciser sur laquelle installer le paquet au préalable<ref>https://github.com/Homebrew/homebrew-core/issues/26108</ref>. Sinon l'erreur suivante survient : ''Unable to load dynamic library 'memcached.so'''. Plusieurs solutions :
<source lang=bash>
<syntaxhighlight lang=bash>
export PATH="/usr/local/opt/php@7.2/bin:$PATH"
export PATH="/usr/local/opt/php@7.2/bin:$PATH"
export PATH="/usr/local/opt/php@7.2/sbin:$PATH"
export PATH="/usr/local/opt/php@7.2/sbin:$PATH"
sudo pecl uninstall memcached; sudo pecl install memcached
sudo pecl uninstall memcached; sudo pecl install memcached
</syntaxhighlight>
</source>
ou
ou
<source lang=bash>
<syntaxhighlight lang=bash>
sudo phpdismod -v 7.2 memcached; sudo phpenmod -v 7.2 memcached
sudo phpdismod -v 7.2 memcached; sudo phpenmod -v 7.2 memcached
</syntaxhighlight>
</source>


Pour vérifier :
Pour vérifier :
<source lang=bash>
<syntaxhighlight lang=bash>
php7.0 -r "phpinfo();" |grep -i memcache
php7.0 -r "phpinfo();" |grep -i memcache
php7.1 -r "phpinfo();" |grep -i memcache
php7.1 -r "phpinfo();" |grep -i memcache
Ligne 153 : Ligne 153 :
php7.3 -r "phpinfo();" |grep -i memcache
php7.3 -r "phpinfo();" |grep -i memcache
php7.4 -r "phpinfo();" |grep -i memcache
php7.4 -r "phpinfo();" |grep -i memcache
</syntaxhighlight>
</source>
}}
}}



Version du 16 avril 2020 à 08:19

Qu'est-ce que PEAR ?

PEAR, acronyme de PHP Extension and Application Repository, est un framework PHP libre issu d'un groupe de développeurs qui proposent des extensions PHP en garantissant un code de qualité. La liste complète des extensions est téléchargeable gratuitement sur le site officiel[1].

Pour l'installer le framework, il y a quatre solutions :

  1. Télécharger les packages un par un sur http://pear.php.net/packages.php.
  2. Télécharger le gestionnaire sur https://pear.php.net/go-pear, et le lancer (ex : http://localhost/Frameworks/go-pear.php). Avec l'installation par défaut, les fichiers sont téléchargés dans un sous-dossier "PEAR".
  3. La commande pear install Nom_du_package.
  4. La commande php pyrus.phar install pear/Nom_du_package.

DB

L'extension PEAR DB fournit une gamme de fonctions de gestion de base de données permettant d'utiliser le même code quel que soit la base de données. Cela permet, si vous décidez de changer de BDD de ne pas être obligé de modifier de nouveau tous vos scripts. Un simple changement de variable vous permettra de passer de MySQL à Oracle par exemple.

Elle n'est plus maintenue depuis 2015[2], ce qui offre un inconvénient par rapport à PEAR MDB2.

Connexion à la base

Se connecter à une base de données revêt la syntaxe suivante :

require_once('DB.php'); // Indispensable

$dbType = "mysql";
$host = "127.0.0.1";
$account = "Mon_Compte";
$pass = "Mon_Mot_de_passe";
$dbName = "Ma_Base";
$dsn = "$dbType://$account:$pass@$host/$dbName";

$db = DB::connect($dsn);

if (PEAR::isError($db)) {
echo "Erreur : ".$db->getMessage();
}

Il est également possible de remplacer la chaîne de caractères par un tableau contenant vos informations :

$dsn = array(
    'phptype'  => 'mysql',
    'username' => 'myAccount',
    'password' => '****',
    'hostspec' => '127.0.0.1',
    'database' => 'tests',
);

Vous êtes donc connectés à votre base de données. Il s'agit maintenant d'effectuer des opérations avec celle-ci.

Fermeture de la connexion

Il est important de fermer votre connexion une fois vos opérations terminées pour augmenter la sécurité de votre code, réduisant les risques d'atteinte à vos données par un individu mal intentionné. Voici donc le code détruisant la connexion :

$db->disconnect();


Envoyer une requête

Une fois connecté, vous allez pouvoir envoyer des requêtes à votre BDD comme suit :

$query = "SELECT * FROM table WHERE id=5";
$rsc = $db->query($query);

Récupérer des informations

Comme avec n'importe quelle base de données, vous aurez à récupérer le résultat de votre requête. Voici une fonction équivalente de mysql_fetch_array() :

$query = "SELECT * FROM table WHERE id=5";
$rsc = $db->query($query);

if ( DB::isError($rsc) )
die($rsc->getMessage());

while($result = $rsc->fetchRow(DB_FETCHMODE_ASSOC) )
{
 echo $result['id']."\n";
}

MDB2

Cette bibliothèque issue de la précédente, offre une API de gestion des SGBD. Elle se télécharge sur http://pear.php.net/package/MDB2.

Spreadsheet_Excel_Writer

Cette bibliothèque fournit des classes de manipulation de fichier .xls sont[3][4].

Pour l'installer, il faut simplement télécharger le paquetage Spreadsheet_Excel_Writer, qui utilise OLE et Getopt.

Pour l'utiliser :

include "Spreadsheet/Excel/Writer.php;

Limites

Cette bibliothèque n'est plus maintenue depuis 2012[5], on lui préfèrera donc PHPExcel[6][7], qui gère en plus l'auto-ajustement, les filtres, et les XLSX (plus de limite de 65 536 lignes par feuille).

D'autant plus qu'elle remplit rapidement les logs avec des centaines de warnings : Object of class Spreadsheet_Excel_Writer_Format could not be converted to int.

phpDocumentor

Ce générateur de documentation analyse aussi le code. Ainsi, on peut décrire dans l'annotation qui précède une méthode, les types de ses arguments ou de son résultat[8] :

/**
 * @param bool $condition
 *
 * @return String|null
 */

Une méthode qui hérite d'une autre peut aussi hériter de sa doc :

@inheritdoc

PECL

PECL (prononcé "pickle", pour PHP Extension Community Library), est un gestionnaire de paquets. Exemples :

 sudo pecl install memcached
 sudo pecl install redis
 sudo pecl install apcu
 sudo pecl install xdebug
 sudo pecl install amqp
 sudo pecl install igbinary
 sudo pecl install imagick

Pour désinstaller :

 sudo pecl uninstall memcached

Logo

Sur un serveur avec plusieurs versions de PHP actives, il peut être nécessaire de préciser sur laquelle installer le paquet au préalable[9]. Sinon l'erreur suivante survient : Unable to load dynamic library 'memcached.so'. Plusieurs solutions :

 export PATH="/usr/local/opt/php@7.2/bin:$PATH"
 export PATH="/usr/local/opt/php@7.2/sbin:$PATH"
 sudo pecl uninstall memcached; sudo pecl install memcached

ou

 sudo phpdismod -v 7.2 memcached; sudo phpenmod -v 7.2 memcached

Pour vérifier :

php7.0 -r "phpinfo();" |grep -i memcache
php7.1 -r "phpinfo();" |grep -i memcache
php7.2 -r "phpinfo();" |grep -i memcache
php7.3 -r "phpinfo();" |grep -i memcache
php7.4 -r "phpinfo();" |grep -i memcache

Références