Re: php et erreur : PHP Warning: Cannot modify header inform…

Page principale

Répondre à ce message
Auteur: anne.guilde@free.fr
Date:  
À: guilde
Sujet: Re: php et erreur : PHP Warning: Cannot modify header information - headers already sent by...
Le 18/01/2020 à 17:40, anne.guilde@??? a écrit :
> Le 18/01/2020 à 17:08, Edgar Bonet a écrit :
>> Bonsoir !
>>
>> Anne a écrit :
>>> Je veux utiliser dans mon php
>>> header("Content-type: text/plain");
>>> header('Content-Disposition: attachment; filename="'.$filename_vcf.'"');
>>
>> Je t'avais envoyé jeudi, en message privé, un patch pour faire
>> exactement ça (sauf que c'est "text/vcard"). Dans ce patch, j'encadre à
>> l'intérieur d'une fonction l'envoi du début de la page HTML :
>>
>> -- 8< ------------------------------------------------------------------
>> diff --git a/index.php b/index.php
>> index 24d474b..8062a43 100644
>> --- a/index.php
>> +++ b/index.php
>> @@ -18,6 +18,9 @@
>>   */
>>
>>   error_reporting(E_ALL & ~E_NOTICE); // report all errors except notices
>> +
>> +function print_html_header()
>> +{
>>   echo '
>>       <!DOCTYPE html>
>>       <html lang="en">
>>
>> @@ -35,6 +38,7 @@
>>               <div class="boxShadows" id="headline">
>>                   <h1>csv2vcf: convert *.csv to *.vcf</h1>
>>   ';
>> +}
>>   /* === examples for different vCard Versions according to Wikpedia ===
>>   vCard 2.1
>>
>> [...]
>> -- 8< ------------------------------------------------------------------
>>
>> Le but est de *ne pas* envoyer ce HTML quand ce que tu veux est envoyer
>> un vCard en pièce jointe.
>>
>>> Le début du fichier php
>>>
>>> <!DOCTYPE html>
>>> <html lang="en">
>>> <head>
>>> [...]
>>
>> Ceci, comme tout ce qui n'est pas entre "<?php" et "?>", est envoyé
>> textuellement par l'interpréteur PHP au client. Comme expliqué dans la
>> page que tu as lu, à partir du moment où tu envoies du contenu au
>> client, l'interpréteur envoie des en-têtes, si ce n'est déjà fait.
>>
>> Solution : regarde comment c'est fait dans le patch que je t'ai envoyé.
>>
>
> con cette nana, je vous le jure.
> Je n'avais pas vu la pièce jointe.
>
> J'avais déjà remplacé les fwrite par des print
> C'était en clair dans le corps du mail!
>
> Je regarde tout cela avec la pièce jointe.
>


Merci Edgar

testé
Cela fonctionne très bien.
J'ai juste ajouté un print_html_header(); ici
---
else
{
    print_html_header();  // ajout
    echo '<form method="post" enctype="multipart/form-data">
                <label for="file">Please select your File.csv then hit convert:</label>
---


Je n'aurais jamais pensé à faire
function print_html_header()

Le script php n'a presque plus rien à voir avec le script que j'avais
trouvé sur sourceforge.
https://sourceforge.net/projects/csv2vcf-php/


J'avais un souci avec
$delimiter = $_POST['_delimiter'] == 'tab' ? "\t" : $_POST['_delimiter'];

J'avais donc mis
$delimiter = $_POST['_delimiter'];

Je viens de re tester la ligne
$delimiter = $_POST['_delimiter'] == 'tab' ? "\t" : $_POST['_delimiter'];

Cela fonctionne très bien.

la partie du script
<select name="_delimiter" >
    <option value=""></option>
      <option value="'.$comma.'">Comma</option>
    <option value="'.$semicolon.'">Semicolon</option>
    <option value="'.$tab.'">Tab</option>
</select><br />


$comma = ',';
$semicolon = ';';
// $tab = '    ';
$tab = 'tab';


Ce qui ne fonctionnait pas c'était $tab = 'tab';
Je l'avais remplacé par la ligne en commentaire

Pourquoi cela fonctionne maintenant et pourquoi cela ne fonctionnait
pas, mystère.

J'ai mis le script sur pastebin

https://pastebin.com/afGGXZSN
=> ecureuil-php-csv-vcf-finalise (php csv2vcf: convert *.csv to *.vcf
finalisé)

Merci à tous ceux qui m'ont aidé

Anne