web-dev-qa-db-fra.com

Lien HREF pour les fichiers Excel générés à l'aide de PHP

Je souhaite connaître vos suggestions sur la méthode "préférée" de création de liens vers des fichiers Excel générés de manière dynamique à l'aide de PHP.

En utilisant PHPExcel (ou tout autre éditeur Excel), je dois générer un fichier Excel téléchargeable avec PHP. La méthode évidente consiste à créer un lien vers ce fichier PHP avec un paramètre tel que

<a href="download.php?data=gdp">Download GDP figures</a>

Cependant, à des fins de référencement, la méthode préférée je pense serait:

<a href="country_gdp.xls">Download GDP figures</a>

surtout si les utilisateurs avancés (tels que les chercheurs) utilisent le paramètre de recherche Google type de fichier: xls dans leurs recherches.

Notez que je ne suis PAS un expert en référencement et que je n'ai aucune preuve que ce dernier est meilleur. Cependant, je suppose que la deuxième méthode serait plus consultable que la première, même dans une faible mesure. Le problème est bien sûr que je ne sais pas comment générer le fichier Excel de manière dynamique en utilisant cette 2ème méthode.

La première méthode est-elle acceptable et j'essaie simplement de compliquer les choses? Ou préférez-vous la deuxième méthode et disposez-vous d'une solution de contournement pour appeler un script PHP afin de générer le fichier Excel de manière dynamique?

1
alds

Je vais me lancer dans une conjecture sauvage et dire que Google voit probablement les deux documents correctement comme une feuille de calcul xls (à condition que les en-têtes Content-Type de l'URL download.php soient correctement définis).

Cependant, générer le fichier signifie que vous devrez décider où le stocker. Si vous le stockez sur le système de fichiers, vous ne pourrez plus avoir plusieurs serveurs Web. Si vous la stockez dans la base de données, vous pourriez gonfler un peu votre base de données. Si vous le stockez sur un CDN, il y aura une certaine latence pendant la propagation du fichier (à partir du moment où il est demandé ou généré).

Mais puisque vous avez demandé quelle est ma méthode préférée, c'est ce que je fais. Je n'aime pas attacher l'interface utilisateur en attendant que les rapports soient générés. Là où je travaille, certains rapports prennent plusieurs minutes à générer et les lier à l'interface utilisateur est sujet aux erreurs car si l'utilisateur quitte l'application, la génération s'achèvera prématurément. Même si cela peut ajouter de la complexité, je préfère utiliser RabbitMQ pour découpler les événements (c'est-à-dire un événement de génération d'un rapport généré par un utilisateur ou un cron) du travail (par exemple, un processus créant un rapport). RabbitMQ (ou une architecture de bus de messages similaire) vous permet également de paralléliser facilement la génération de rapports (s’il en existe un grand nombre). Ensuite, une fois le rapport généré, vous pouvez utiliser l'une des trois méthodes de stockage (mentionnées ci-dessus) pour stocker le rapport généré, en sachant qu'il est découplé de l'interaction de votre utilisateur. La mise en cache même un petit peu peut aider un peu (surtout sur un site occupé). Les utilisateurs ne voient souvent aucun inconvénient à ce qu'un rapport soit n pe périmé. Cependant, cela dépend beaucoup de la nature du rapport. S'il s'agit d'un rapport d'exploitation, il peut être nécessaire d'être à la minute près. Dans ce cas, il peut y avoir peu de place pour la pré-génération de vos rapports. En outre, s’il existe de nombreuses variables différentes en tant qu’intrants dans le rapport, il peut être impossible de les générer étant donné l’ampleur des permutations.

Enfin, si la génération de rapports est coûteuse (en temps, en CPU, etc.), il existe une autre option hybride. Vous pourrez peut-être pré-résumer ne partie de votre rapport. Si la partie à forte intensité de latence peut être pré-calculée et que la partie "actuelle" de votre rapport peut utiliser ces informations pour générer rapidement le rapport, vous pourrez alors générer directement le rapport à partir de la demande de l'utilisateur. . Avec cela, il y a peu de pièces mobiles supplémentaires (telles que l'invalidation de la présélection si les données changent). Toutefois, pour les enregistrements du passé (tels que les données de télémétrie), les données ne changent pas. Donc, c'est un excellent candidat pour la présomption.

Désolé pour la longue réponse. J'espère que cela t'aides.

1
Homer6

Ceci est une question dans un fichier Excel générant de la vitesse. Si votre fichier .xls est généré rapidement, vous pouvez utiliser la méthode dynamique. Mais ce n’est pas préférable, car vous devez créer votre fichier Excel à chaque appel du script. Le meilleur moyen consiste à utiliser le script cron (si vous devez mettre à jour votre xls) pour générer votre fichier xls et le réécrire à un emplacement statique.

Je parie donc que vous choisirez la deuxième option avec la tâche cron générant le fichier .xls.

Bonne journée!

0
Serge Velikanov