Besoin d'aide pour un petit script dont je ne suis pas l'auteur

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Besoin d'aide pour un petit script dont je ne suis pas l'auteur

Re: Besoin d'aide pour un petit script dont je ne suis pas l'auteur

par freddu12 » 23 juin 2022, 07:51

Ce n'est pas du tout ma partie le PHP. Je ne suis pas développeur mais plutôt simple utilisateur d'un script qui a été créé à l'époque pour automatiser le changement de caractère d'une extraction du logiciel postal vers Excel.

La ligne 151 est celle-ci :

Code : Tout sélectionner

for($index = 0 ; $index<sizeof($page) ; $index++)
Maintenant que $page est déclaré comme tableau ce qui semble rentrer dans le cas du "Parameter must be an array" (dernière modification), en faisant une recherche, une des solutions passe par une condition avec is_array dont je n'ai absolument aucune idée comme cela peut-être mis en place.

Re: Besoin d'aide pour un petit script dont je ne suis pas l'auteur

par @rthur » 22 juin 2022, 21:10

Il faut que tu essayes de comprendre par toi-même les messages d'erreur, c'est comme cela que l'on progresse...
( ! ) Warning: sizeof(): Parameter must be an array or an object that implements "Countable"
in C:\wamp64\www\destineo\traitement.php on line 151
Comment comprends-tu ce message d'erreur ?
Quelle est cette ligne ?
A ton avis, que faudrait-il regarder pour tenter une correction ?

Re: Besoin d'aide pour un petit script dont je ne suis pas l'auteur

par freddu12 » 22 juin 2022, 14:25

Finalement, j'ai pu tester et il y a encore quelques erreurs.
Pour être plus complet, il s'agit d'un logiciel qui traite les contenants de la Poste pour du mailing.

Voici les erreurs :
----------------------------------------------------------------------------------
lecture du fichier et nettoyage
decoupage par cellule
rapport du traitement:
14869 adresses ont �t� trait�es
type campagne:
( ! ) Warning: sizeof(): Parameter must be an array or an object that implements
Countable in C:\wamp64\www\destineo\traitement.php on line 151
Call Stack
# Time Memory Function Location
1 0.0008 365872 {main}( ) ...\traitement.php:0
virtuel
nombre de lots : 2
nombre de contenants : 4
nombre de liasses : 179
nombre de liasses physiques : 0
( ! ) Warning: sizeof(): Parameter must be an array or an object that implements
Countable in C:\wamp64\www\destineo\traitement.php on line 157
Call Stack
# Time Memory Function Location
1 0.0008 365872 {main}( ) ...\traitement.php:0
nombre de liasses ETIC : 1
liasses avec etiquettes:
C:\wamp64\www\destineo\traitement.php:163:
array (size=43)
0 =&gt; string &#39;NumPli&#39; (length=6)
1 =&gt; string &#39;Ligne0&#39; (length=6)
2 =&gt; string &#39;D�but lot&#39; (length=9)
3 =&gt; string &#39;Visuel lot&#39; (length=10)
4 =&gt; string &#39;N�lot&#39; (length=5)
5 =&gt; string &#39;D�but contenant&#39; (length=15)
6 =&gt; string &#39;Visuel contenant&#39; (length=16)
7 =&gt; string &#39;N�contenant&#39; (length=11)
8 =&gt; string &#39;D�but liasse&#39; (length=12)
9 =&gt; string &#39;Visuel liasse&#39; (length=13)
10 =&gt; string &#39;N�liasse&#39; (length=8)
11 =&gt; string &#39;N�pli de la liasse&#39; (length=18)
12 =&gt; string &#39;Liasse physique&#39; (length=15)
13 =&gt; string &#39;Liasse avec �tiquette&#39; (length=21)
14 =&gt; string &#39;Code pr�paration&#39; (length=16)
15 =&gt; string &#39;Libelle Preparation&#39; (length=19)
16 =&gt; string &#39;Code pr�sentation&#39; (length=17)
17 =&gt; string &#39;Libelle Presentation&#39; (length=20)
18 =&gt; string &#39;Cl� HUB&#39; (length=7)
19 =&gt; string &#39;Cl� PIC&#39; (length=7)
20 =&gt; string &#39;Cl� PTR&#39; (length=7)
21 =&gt; string &#39;Cl�PDC&#39; (length=6)
22 =&gt; string &#39;Libelle Produit&#39; (length=15)
23 =&gt; string &#39;N�enregistrement du fichier source&#39; (length=34)
24 =&gt; string &#39;Nom fichier source&#39; (length=18)

25 =&gt; string &#39;IDS&#39; (length=3)
26 =&gt; string &#39;Type_IDS&#39; (length=8)
27 =&gt; string &#39;Type_Logo_Service&#39; (length=17)
28 =&gt; string &#39;ProduitLigne1&#39; (length=13)
29 =&gt; string &#39;ProduitLigne2&#39; (length=13)
30 =&gt; string &#39;CI&#39; (length=2)
31 =&gt; string &#39;DateDepot&#39; (length=9)
32 =&gt; string &#39;N� Adh�rent&#39; (length=11)
33 =&gt; string &#39;Civilit�&#39; (length=8)
34 =&gt; string &#39;Nom&#39; (length=3)
35 =&gt; string &#39;Pr�nom&#39; (length=6)
36 =&gt; string &#39;Rue 1&#39; (length=5)
37 =&gt; string &#39;Rue 2&#39; (length=5)
38 =&gt; string &#39;Rue 3&#39; (length=5)
39 =&gt; string &#39;CP&#39; (length=2)
40 =&gt; string &#39;Ville&#39; (length=5)
41 =&gt; string &#39;Pays&#39; (length=4)
42 =&gt; string &#39;Raison Sociale&#39; (length=14)
ecriture dans un fichier
traitement realise avec succes
----------------------------------------------------------------------------------
Merci.

Re: Besoin d'aide pour un petit script dont je ne suis pas l'auteur

par freddu12 » 21 juin 2022, 21:45

Merci pour le retour, je modifierai le code Jeudi. Je te tiendrai au courant.
Merci de prendre du temps pour me répondre.

Re: Besoin d'aide pour un petit script dont je ne suis pas l'auteur

par @rthur » 21 juin 2022, 21:15

$page = "";
[...]
$page[$index]= fgets($fp, 4096); // lecture du contenu de la ligne
Tu as une erreur ici, tu initialises $page comme une string vide, pour ensuite l'utiliser comme un tableau ce qui est incorrect.
En l'initialisant comme un tableau vide ça devrait déjà être un peu mieux :
$page = array();


Il est possible que précédemment ce code fonctionnait sur une ancienne version de PHP et que désormais ça te renvoie ces erreurs car le code n'est pas très propre.

Re: Besoin d'aide pour un petit script dont je ne suis pas l'auteur

par freddu12 » 21 juin 2022, 20:27

Bonsoir,

Ligne 46 à 48 :

Code : Tout sélectionner

while (!feof($fp)) { //on parcourt toutes les lignes $page[$index]= fgets($fp, 4096); // lecture du contenu de la ligne $page[$index] = rtrim( $page[$index] );
Ligne 60 :

Code : Tout sélectionner

for($index = 0 ; $index<sizeof($page) ; $index++)
Ligne 151 :

Code : Tout sélectionner

echo((sizeof($liasse_physique)>sizeof($liasse_etic))?"physique":"virtuel");
Ligne 157 :

Code : Tout sélectionner

echo("nombre de liasses ETIC : ".sizeof($liasse_etic)."<BR>");
Je n'ai rien essayé comme correctif car je n'ai que très peu de connaissances en PHP et que le script existait bien avant ma venue dans la société. D'après l'historique il date de 2012. Je me suis contenté de l'utiliser jusqu'à maintenant.

Re: Besoin d'aide pour un petit script dont je ne suis pas l'auteur

par @rthur » 21 juin 2022, 19:33

Et les lignes 47/48 où il y a ces erreurs, ce sont lesquelles ?
Qu'en penses-tu ? Qu'as-tu essayé pour tenter un correctif ?

Re: Besoin d'aide pour un petit script dont je ne suis pas l'auteur

par freddu12 » 21 juin 2022, 17:34

J'ai recopié les erreurs à partir de l'image car je ne suis pas devant le PC :

Warning : Cannot assign an empty string to a string offset in C:\......... on line 47
Notice : Uninitialized string offset : 14869 in C:\........... on line 48
Warning : Cannot assign an empty string to a string offset in C:\......... on line 48
Warning : sizeof() : Parameter must be an array or an object that implement Countable in C:\....... on line 60
Warning : sizeof() : Parameter must be an array or an object that implement Countable in C:\....... on line 60
Warning : sizeof() : Parameter must be an array or an object that implement Countable in C:\....... on line 151
Warning : sizeof() : Parameter must be an array or an object that implement Countable in C:\....... on line 157

Re: Besoin d'aide pour un petit script dont je ne suis pas l'auteur

par or 1 » 21 juin 2022, 17:07

Pourriez-vous m'aider ?
non, pas sans les erreurs, qui sont probablement au format texte donc copier/coller possible.

Besoin d'aide pour un petit script dont je ne suis pas l'auteur

par freddu12 » 21 juin 2022, 16:49

Bonjour à tous,

Je me permets de vous contacter aujourd'hui car je travaille dans une société de routage et suite à un formatage de PC, le script PHP qui permettait de remplacer certains caractères dans un fichier Excel (remplacement de l'astérisque par un "g") ne fonctionne plus.

Ne connaissant pas vraiment le PHP, je ne sais trop comment résoudre les erreurs qui s'affichent.

Le code du fichier PHP :

Code : Tout sélectionner

<html> <body> <?php //var_dump($_POST); if ($_FILES['monfichier']['error']) { switch ($_FILES['monfichier']['error']){ case 1: // UPLOAD_ERR_INI_SIZE echo"Le fichier d�passe la limite autoris�e par le serveur (fichier php.ini) !"; break; case 2: // UPLOAD_ERR_FORM_SIZE echo "Le fichier d�passe la limite autoris�e dans le formulaire HTML !"; break; case 3: // UPLOAD_ERR_PARTIAL echo "L'envoi du fichier a �t� interrompu pendant le transfert !"; break; case 4: // UPLOAD_ERR_NO_FILE echo "Le fichier que vous avez envoy� a une taille nulle !"; break; } } else { // $_FILES['nom_du_fichier']['error'] vaut 0 soit UPLOAD_ERR_OK // ce qui signifie qu'il n'y a eu aucune erreur } $nomOrigine = $_FILES['monfichier']['name']; //var_dump($nomOrigine); $elementsChemin = pathinfo($nomOrigine); $extensionFichier = $elementsChemin['extension']; $extensionsAutorisees = array("txt", "csv"); if (!(in_array($extensionFichier, $extensionsAutorisees))) { echo "Le fichier n'a pas l'extension attendue"; } else { //ouverture du fichier //var_dump($_FILES['monfichier']); //var_dump($elementsChemin); if(!$fp = fopen($_FILES['monfichier']['tmp_name'],"r")) echo "Echec de l'ouverture du fichier<BR>"; else { //recuperation du texte dans un tableau php echo("lecture du fichier et nettoyage<br>"); $page = ""; $index=0; while (!feof($fp)) { //on parcourt toutes les lignes $page[$index]= fgets($fp, 4096); // lecture du contenu de la ligne $page[$index] = rtrim( $page[$index] ); $index++; } fclose($fp); //var_dump($page[0]); //on parcours le tableau page et on va ranger son contenu dans un nouveau tableau, plus optimis� pour le traitement echo("decoupage par cellule<BR>"); $tableau = explode ( ";" , $page[0] ); for($index = 0 ; $index<sizeof($page) ; $index++) { $tableau[$index] = explode ( ";" , $page[$index] ); } //la derniere cellule de chaque ligne � la particulatit� de contenir un retour chariot, un nettoyage est donc necessaire //foreach($tableau as $index => $ligne) $nblot=0; $nbcont=0; $nbliasse=0; $liasse_etic=0; $liasse_pic = array(); $liasse_physique = array(); foreach($tableau as $index_ligne=>$ligne) { foreach($ligne as $index_cellule=>$cellule) { $tableau[$index_ligne][$index_cellule] = rtrim($tableau[$index_ligne][$index_cellule]); //nettoyage des espaces en trop switch($index_cellule) { case 2: { if($cellule == "*") { $tableau[$index_ligne][$index_cellule] ="l"; $nblot++; } break; } case 5: { if($cellule == "*") { $tableau[$index_ligne][$index_cellule] ="g"; $nbcont++; } break; } case 8: { if($cellule == "*") { $tableau[$index_ligne][$index_cellule] ="g"; $nbliasse++; } break; } case 12: { if($cellule == "*") { $tableau[$index_ligne][$index_cellule] ="r"; if($tableau[$index_ligne][13] == "" ) $type = "physique"; if(!empty($liasse_physique) && $liasse_physique[sizeof($liasse_physique) - 1] != $ligne [10]) $liasse_physique[] = $ligne [10]; else if(empty($liasse_physique)) $liasse_physique[] = $ligne [10]; $liasse_physique++; } break; } case 13: { if($cellule == "*" || $cellule == "**") { $tableau[$index_ligne][$index_cellule] = "z"; if(!empty($liasse_pic) && $liasse_pic[sizeof($liasse_pic) - 1] != $ligne [10]) $liasse_pic[] = $ligne [10]; else if(empty($liasse_pic)) $liasse_pic[] = $ligne [10]; $liasse_etic ++; } break; } } } } //edition du rapport echo("rapport du traitement: <BR><BR>"); echo(sizeof($tableau) - 1 ." adresses ont �t� trait�es<BR>"); echo("type campagne: "); echo((sizeof($liasse_physique)>sizeof($liasse_etic))?"physique":"virtuel"); echo("<BR>"); echo("nombre de lots : ".$nblot."<BR>"); echo("nombre de contenants : ".$nbcont."<BR>"); echo("nombre de liasses : ".$nbliasse."<BR>"); echo("nombre de liasses physiques : ".sizeof($liasse_physique)."<BR>"); echo("nombre de liasses ETIC : ".sizeof($liasse_etic)."<BR>"); echo("liasses avec etiquettes: "); foreach($liasse_pic as $index => $liasse) echo ($liasse.", "); echo("<BR>"); var_dump($tableau[0]); echo("<BR>"); //ecriture dans un fichier if(!$fp = fopen(str_replace( ".txt" , ".csv" , $nomOrigine),"w")) echo "Echec de l'ouverture du fichier"; else { echo("ecriture dans un fichier<br>"); //on parcours le tableau contenant les adresses et on les ecrit dans le fichier de sortie foreach($tableau as $index=>$ligne) { fputcsv($fp , $ligne, ';'); } fclose($fp); echo "traitement realise avec succes"; } } } ?> </body> </html>
Par contre, je n'arrive pas a envoyer une image pour les erreurs rencontrées.

Lors de la précédente réinstallation (2020), je n'avais pas eu ce problème. J'avais juste eu le souci de la taille du fichier bloquée à 2Mo que j'avais modifié dans le php.ini. Je suis avec Wamp64 et la version 7 de Php.

Pourriez-vous m'aider ?

Merci par avance.