IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Erreur de sortie dans classe de création de vCard


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 579
    Points : 804
    Points
    804
    Par défaut Erreur de sortie dans classe de création de vCard
    Bonjour,

    Je crée une classe de création de vCard. Je vous mets les fonctions de sortie ci-dessous.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    	public function download() {
    		// define output
    		$output = $this->getOutput();
     
    		foreach ($this->getHeaders() as $header) {
    			header($header);
    		}
     
    		// echo the output and it will be a download
    		echo $output;
    	}
     
    	public function getOutput() {
    		$vCard = <<<VCF
    BEGIN:VCARD
    VERSION:4.0
    %s
    END:VCARD
    VCF;
    	$content = [];
    	foreach ($this->properties as $name=>$value) {
    		$content[] = "$name:$value";
    	}
    	return sprintf($vCard, implode("\r\n", $content));
    	}
     
    	public function getHeaders() {
    		var_dump(__method__);
    		$contentType 		= 'Content-type: text/vcard; charset=utf-8';
    		//$contentDisposition = 'attachment; filename=' . $this->getFilename() . '.' . $this->getFileExtension();
    		$contentDisposition	= 'attachment; filename=' . $this->properties['FN'] . '.vcf'; // A améliorer selon exemple ci-dessus
    		$contentLength = mb_strlen($this->getOutput(), '8bit');
    		$connection = 'close';
     
    		return [
    			'Content-type: ' . $contentType,
    			'Content-Disposition: ' . $contentDisposition,
    			'Content-Length: ' . $contentLength,
    			'Connection: ' . $connection,
    		];
    	}
     
    	public function __toString() { // A des fins de contrôle essentiellement
    		return $this->getOutput();
    	}
    La méthode __toString() fonctionne très bien, par contre si j'essaye la méthode download(), j'obtiens le résultat suivant et je n'arrive pas à ouvrir le fichier généré:
    <pre class='xdebug-var-dump' dir='ltr'>
    <small>C:\wamp64\www\hotels\classes\moimp\vCard.php:327:</small><small>string</small> <font color='#cc0000'>'VCard\VCard::getHeaders'</font> <i>(length=23)</i>
    </pre>BEGIN:VCARD
    VERSION:4.0
    FN:Toto
    ADR;PREF=1:;;Bielstraße 5;Lengnau;Aargau;2543;CH
    TEL;VALUE=uri;PREF=1;TYPE="voice":tel:+41-32-652-0000
    TEL;VALUE=uri;PREF=2;TYPE="fax":tel:+41-32-652-0000
    LANG;PREF=1:de
    END:VCARDBEGIN:VCARD<br />
    VERSION:4.0<br />
    FN:Toto<br />
    ADR;PREF=1:;;Bielstraße 5;Lengnau;Aargau;2543;CH<br />
    TEL;VALUE=uri;PREF=1;TYPE="voice":tel:+41-32-652-0000<br />
    TEL;VALUE=uri;PREF=2;TYPE="fax":tel:+41-32-652-0000<br />
    LANG;PREF=1:de<br />
    END:VCARD
    P.S. Je ne sais pas ce que j'ai fait mais maintenant je n'ai plus aucune sortie.

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 579
    Points : 804
    Points
    804
    Par défaut Classe vCard: Reste 3 soucis.
    EDIT: J'ai ajouté exit après ma ligne 11 et maintenant ma classe fonctionne mais il reste trois points que je ne comprends pas:
    1. Pourquoi suis-je obligé de mettre cet exit; après la ligne 11 echo $output; pour permettre le téléchargement.
    2. Lorsque j'ouvre le fichier généré dans Microsoft Outlook, j'ai un problème d'encodage des caractères diacritiques. Lorsque j'ouvre ce fichier dans Notepad++, il est correctement affiché et encodé. Est-ce un problème de Outlook? En plus dans Outlook, le carnet d'adresse n'affiche pas tout mais il s'agit apparemment d'un problème de version puisque la version 4.0 (2011) utilisée dans ma classe est postérieure à ma version Outlook de 2007.
    3. Je ne trouve pas comment forcer l'affichage de la boîte de dialogue de téléchargement.

Discussions similaires

  1. Erreur étrange NSUInteger dans classe custom
    Par Raz-X dans le forum Objective-C
    Réponses: 0
    Dernier message: 06/06/2012, 11h45
  2. erreur avec withevents dans un module de classe
    Par patbou dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 20/12/2007, 04h32
  3. erreur de compilation dans la création d'un crosstab
    Par longuele dans le forum iReport
    Réponses: 7
    Dernier message: 29/10/2007, 10h13
  4. Réponses: 1
    Dernier message: 06/06/2006, 17h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo