0

J'ai un projet ZF3 avec un contrôleur qui ouvre des fichiers Excel et les compare avec un modèle qui sera également ouvert.différence sur le système de production

Sur mon portable tout développement (xampp) fonctionne très bien, à mon système de production (ubuntu) le phpspreadsheet provoque des erreurs (je pense qu'il est l'un).

ici un extrait de mon code:

$fileName="./public/files/" . $fileName;  //.\ neu 
      echo $fileName; 
      $template= new Spreadsheet(); 
      $importdcl= new Spreadsheet(); 
      $template= \PhpOffice\PhpSpreadsheet\IOFactory::load('./public/files/Template_DCL_final.xlsx'); 
      $importdcl= \PhpOffice\PhpSpreadsheet\IOFactory::load($fileName); 
      echo "filename geladen"; 

J'ai déjà les dossiers dans les chemins non relatifs parce que basePath() ne fonctionne pas, il ne donnera aucun résultat.

L'instruction echo est juste parce que le journal du serveur ne donnera aucune erreur. Sur mon système de développement, j'obtiens le texte d'écho sur mon système de production, l'erreur semble être sur les instructions de chargement.

Première question: Comment pourrais-je utiliser des chemins relatifs ici?

Deuxième question: Comment puis-je obtenir une wether idée est quelque chose de mal avec la classe de feuille de calcul?

C'est ce que le compositeur chargé:

"phpoffice/phpspreadsheet" : "dev-develop", 

Est-ce un problème, car il a cette version dev? À ce stade, je suis assez confus parce que j'ai joué avec les chemins des fichiers, j'ai changé les droits manuellement dans le dossier, j'ai vérifié les journaux du serveur et maintenant je n'ai aucune idée à gauche.

Voici les droits dans le dossier:

enter image description here

Toutes les suggestions utiles appréciées.

Répondre

0

Réponse (je l'espère) à la première question: si votre application est basée sur ZendSkeletonApplication, vous pouvez utiliser des chemins relatifs à la racine de votre (de index.php) d'application:

/** 
* This makes our life easier when dealing with paths. Everything is relative 
* to the application root now. 
*/ 
chdir(dirname(__DIR__)); 

Donc, si votre les fichiers de données sont situés dans <application root>/public/files, alors vous devriez être capable de les lire à partir de controller/service/etc. en utilisant le chemin public/files/<file name>. Vous pouvez le tester avec par exemple. le file_exists function.

Je ne peux pas répondre à votre deuxième question, mais voici quelques suggestions (OK, questions ...):

  • quel est le code d'état de votre (production) réponse du serveur?
  • Avez-vous une autorisation de lecture/écriture sur les fichiers de données à partir du compte du serveur (www-data?)?
  • Est-ce que phpspreadsheet dépend de toutes les extensions PHP? Les avez-vous installés sur votre machine de développement et sur le serveur?
  • Quelle version de PHP est installée sur le serveur? Est-ce que vous ou phpspreadsheet utilisez des fonctionnalités qui peuvent être indisponibles sur cette version?Essayez d'exécuter votre projet non pas via Apache, mais avec le serveur intégré de PHP (mais ne faites pas le faire à long terme) et essayez de reproduire le problème.