Aide pour PostgreSQL ?

#1
Bonjour,

Je voudrais faire fonctionner sur un Projet Web Standard une copie d'un site utilisant une base PostgreSQL. Je n'ai pas d'expérience de Postgre... Mon projet, à terme, est de passer à une base MySQL, le script actuel ne pouvant gérer que du Postgre, mais pour le moment, je dois faire des retouches au script, sans risquer de pépin sur le site en production.

La connexion à la base depuis le script fonctionne, mais impossible de récupérer les données. Pour cette partie de code, je n'ai rien :
echo('<br/>' . $query); echo('<br/>');
$sth = $dbh->prepare($query);
$sth->execute($vals);
var_dump($sth); echo('<br/>');
$data = array();
while($res = $sth->fetch(\PDO::FETCH_ASSOC)) {
$item = new $this();
foreach($res as $key => $val) {

Les infos récupérées sont
SELECT * FROM accommodation ORDER BY name asc
object(PDOStatement)#102 (1) { ["queryString"]=> string(52) "SELECT * FROM accommodation ORDER BY name asc" }

Si je lance la requête SQL dans phpPgAdmin, j'ai bien la liste des lignes de la table accommodation, mais while n'a rien à traiter.
Sur le serveur d'origine, pas de problème.

Quelqu'un aurait-il une idée de la cause de cette absence de réponse ? Est-ce que ça pourrait être un paramétrage de PHP (en 7.3 car le script est basé sur une vieille biblioyhèque plus mise à jour) ?
Merci d'avance
 

PH-Marc-André.B.

Conseiller technique
Membre du personnel
#2
Bonjour Robert,

Merci pour votre confiance dans nos solutions et pour nous avoir partagé la situation problématique avec les requêtes PSQL

Premièrement selon l'exemple de code partagé, il faut s'assurer de cocher pdo_pgsql ainsi que pgsql dans l'interface N0C // Langages // PHP

php.png

Une fois ces extensions cochées, s'assurer de sauvegarder l'environnement PHP dans le bas de page.


Ensuite nous conseillons de synchroniser les octrois dans le N0C // Base de données // PostgreSQL pour l'utilisateur créé

pgsql.png


Pouvez-vous valider ces 2 points et vérifier l'exécution du script PHP qui est basé sur une connexion à PostGreSQL s'il vous plaît?
 
#3
Bonjour Marc-André,

Merci pour ces conseils.
Le paramétrage PHP comportait bien l'activation de ces deux extensions, en 7.3 comme en 7.4.
Je viens de synchroniser les octrois.
Un autre site en test sur ce serveur nécessitant une version 8.3 au moins, que le script accédant à la base PostgreSQL ne supporte pas, je ne peux pas dans l'immédiat vérifier. Je le ferai dès que possible.
 
#5
Bonjour,

J'ai pu tester ce matin. Il semble bien que le problème ait été lié à l'absence de synchronisation des octrois.
Je peux maintenant me connecter à l'administration, et les listes de données s'affichent bien.
Merci beaucoup pour vos conseils !
 
#7
Le problème maintenant est que ce vieux script ne me dit pas pourquoi il plante dans certaines fonctions lorsque je passe en PHP 8. Seul un message générique signale qu'il y a eu une erreur.
Là, je suis dépassé.
Basé sur une vieille bibliothèque (Wumpa) pas mise à jour depuis 10 ans, l'essai d'ajout d'une instruction d'affichage des erreurs déclenche une erreur 500.
La même instruction dans le fichier initial index.php n'est pas prise en compte par le code qui affiche l'erreur.
 

PH-Marc-André.B.

Conseiller technique
Membre du personnel
#8
Bonjour, nous sommes désolé que le script PHP plante encore malgré tout,

Quant à l'affichage des erreurs avez-vous essayé la journalisation des erreurs au lieu de l'affichage des erreurs ?

Dans le fichier .htaccess de l'application

php_value log_errors On
php_value error_log /home/USER/error.log

où USER sera a remplacer par le bon nom d'utilisateur de compte N0C
 
#9
Merci pour cette solution, j'ai pu récupérer des infos qui devraient me permettre une correction en attendant mieux.
En fait, c'est la librairie TCPDF qui est en cause.
Peut-être la nouvelle version, bien que dépréciée, corrigera-t-elle les erreurs en question ?
Sinon, il faudra que je passe à tc-lib-pdf du même auteur, si je comprends quelque chose à la méthode de passage de l'une à l'autre.
 
#10
Je jette l'éponge. Cela dépasse mes compétences.
J'ai des erreurs de type "PHP Deprecated: Required parameter $currentfont follows optional parameter $setbom" sur deux fichiers de cette librairie, mais la correction ne supprime pas le message générique d'erreur, et le fichier error.log ne se recrée plus.
Avec la dernière version 6 de cette librairie, même souci. La version 7 déclenche quant à elle d'emblée une erreur 500.

Si j'y reviens un jour, il me faudra comprendre comment passer à tc-lib-pdf
 

PH-Marc-André.B.

Conseiller technique
Membre du personnel
#11
Rebonjour Robert,

Si vous refaites l'essai sous PHP 8.2 ou supérieur avec TCPDF 7, vous pouvez réactiver la journalisation des erreurs via .htaccess et nous partager le contenu correspondant du error.log. Nous pourrons alors examiner plus précisément la cause de l'erreur 500.

Une autre option possible serait de spécifier dans le .htaccesss de ce script un "sethandler" pour forcer une version PHP spécifique que pour cette application là, sans déranger les autres scripts installés dans le compte N0C.

Ex pour PHP 7.4:

Code:
<FilesMatch ".(php4|php5|php3|php2|php|phtml)$">
SetHandler application/x-lsphp74
</FilesMatch>
 
#12
Re bonjour Marc-André,

Merci de ces conseils !
J'essaierai, mais les fichiers concernés par les erreurs dans la version 6 (ancienne) présente sont dans un sous-dossier "include" absent de la version 7.
Je ne le retrouve que dans tc-lib-pdf et je n'ai aucune idée de comment remplacer tcpdf par cette nouvelle bibliothèque.
 

PH-Marc-André.B.

Conseiller technique
Membre du personnel
#13
Bonjour,

Fort probable alors que le code php du script doive être modifié pour inclure la librairie alternative.

Donc le plus simple serait de forcer l'ancienne version PHP compatible sur ce script là via .htaccess :)
 
#14
En effet, mais ce script datant de plus de 10 ans nécessiterait un pro pour le recréer, car je crains que tôt ou tard, il ne puisse brutalement plus fonctionner.
Le souci est que justement, je voulais tester tranquillement une copie sur mon serveur, le vrai site étant chez un autre hébergeur, pour tenter de le rendre compatible 8.4, et plus tard peut-être le rapatrier sur le serveur PH de mon client.

Mais mon projet réel, démarré depuis plusieurs années, est de réussir à reproduire toutes ses fonctionnalités dans un site Joomla! avec Fabrik, en utilisant une base MySQL.
J'ai pu créer des scripts PHP de récupération des données de la base PostgreSQL et d'insertion dans une base MySQL, puis créer peu à peu une partie des fonctionnalités avec Fabrik. Les inscriptions sont a priori fonctionnelles, mais il reste toute la gestion administrative à régler.
Mais faute de testeur, les choses sont au point mort... :(
 
Haut