2017-10-05 3 views
0
<?php 
public function beforeFilter(\Cake\Event\Event $event) 
{ 

    $user = $this->request->session()->read('Auth.User'); 
    $this->set('username', $user['username']); 

    $this->set('profile', $user['profile_pic']) 
} 
?> 

Dans le code ci-dessus, je peux print les username intérieur de l'élément/dossier/nav.ctpComment afficher l'image profil intérieur vue élément

<?php 
    echo $this->Html->image('users/' .stream_get_contents($profile),array('width'=>'100px','height'=>'100px')); 
?> 

quand j'imprimer l'image, des messages d'avertissement ci-dessous.

d'avertissement (2): stream_get_contents() attend le paramètre 1 pour être ressource, entier donné [APP/Template/Element/dossier/nav.ctp, ligne 19]

+0

stockez-vous les données d'image dans la base de données ou seulement le nom de fichier? – arilia

+0

mon champ d'image est dans longblob, j'ai stocké dans la base de données – distromob

+0

j'ai aussi un nom de domaine "destination" exemple /opt/lampp/htdocs/mycakeapps/webroot/img/users/profile2.png – distromob

Répondre

1

Lire le message d'erreur , il est très clair:

stream_get_contents() paramètre 1 à attend être ressource, entier donné

Donc, vous passez un int et pas une ressource. La première chose dans ce cas est de rechercher ce qu'une méthode attend. Voir la documentation de php pour stream_get_contents(). Il veut évidemment a stream resource. Cherchez ce qu'est un stream et un resource et agissez ensuite en conséquence. Cependant, ce que vous essayez ne fonctionne pas de cette façon car vous n'accédez pas au fichier dans le système de fichiers. Voir la documentation au fopen().

Vous devrez faire écho à votre image en tant que données binaires encodées en base64 dans votre balisage. Voir la réponse ici: Is it possible to put binary image data into html markup and then get the image displayed as usual in any browser? Cela va augmenter la taille de l'image de ~ 30% en raison de l'encodage base64.

Je ne ferais pas cela pour beaucoup de grandes images. Je ne l'ai jamais fait moi-même avec beaucoup mais je suis sûr que le navigateur va avoir des problèmes de performance. Sachez qu'il peut y avoir des problèmes de sécurité avec cette solution ainsi que d'éventuels problèmes de performances. Je pourrais imaginer qu'il est possible d'exploiter cela pour injecter des choses indésirables dans le balisage de pages si les données ne sont pas correctement traitées.

De même, stocker des images dans une base de données qui n'est pas faite explicitement pour cette tâche est généralement considéré comme mauvaise pratique. Stockez-le dans un backend de stockage créé à cet effet et renvoyez l'emplacement dans la base de données.

Pour l'avenir se souviennent de lire et messages d'erreur recherche si vous ne comprenez pas et lire la documentation si vous ne savez pas ce qu'ils font.