2017-08-08 2 views
0

J'essaye de faire une fonction de téléchargement de fichier avec CakePHP3 et je n'arrive pas à faire le chemin du bon chemin vers $ this-> response-> fichier(); Voici ma fonction:

public function download($id) 
{ 
    $attachment = $this->Attachments->get($id); 
    $this->response->file(WWW_ROOT.$attachment->filepath.DS.$attachment->filename); 
    $return $this->response; 
} 

Le chemin complet du fichier à l'intérieur de la fonction file() est correct. Cependant, les sorties de la fonction file() avec un chemin supplémentaire.

Le chemin de fichier correct est SERVER_ROOT/public_html/pièces jointes/nom de fichier

Le chemin de sortie est SERVER_ROOT/src // SERVER_ROOT/public_html/pièces jointes/nom de fichier

Ainsi, la fonction file() semble sortir avec le chemin du fichier pour src /, ce que je ne veux pas. Comment puis-je le faire pour sortir le bon chemin? Ou suis-je censé utiliser une autre fonction dans ce cas? Toute aide est appréciée!

+0

** https: //stackoverflow.com/questions/43324554/cakephp-3-production-site-download-file-path-issue** J'aurais dû écrire mon plan sur un post, je voudrais vraiment voir ce comportement disparu :( – ndm

+0

Merci ndm, le problème était en fait la mauvaise URL –

+0

Si oui, voulez-vous partager la solution s'il vous plaît – Andrewboy

Répondre

0

Donc, le problème était en fait l'URL erronée. Bien que le message d'erreur était bizarre, la fonction file() accepte un chemin de fichier complet. Merci pour les commentaires ndm! Ce lien a été utile. CakePHP 3 - Production site download file path issue

-2

Vous devez le configurer dans votre fichier d'amorçage. WWWROOT et wwwWebRoot recherchent ces deux ici

https://book.cakephp.org/3.0/en/development/configuration.html

+0

Vous voulez dire, config/paths.php? J'ai trouvé WWW_ROOT et l'ai configuré, mais je ne vois pas la constante WEB_ROOT n'importe où dans paths.php –

0

Je suis venu ici parce que j'avais le même problème, après un moment j'ai résolu. Le problème basé sur:

protected function validateFile($path) 
{ 
    if (strpos($path, '../') !== false || strpos($path, '..\\') !== false) { 
     throw new NotFoundException(__d('cake', 'The requested file contains `..` and will not be read.')); 
    } 
    if (!is_file($path)) { 
     $path = APP . $path; 
    } 

    $file = new File($path); 
    if (!$file->exists() || !$file->readable()) { 
     if (Configure::read('debug')) { 
      throw new NotFoundException(sprintf('The requested file %s was not found or not readable', $path)); 
     } 
     throw new NotFoundException(__d('cake', 'The requested file was not found')); 
    } 

    return $file; 

}

la fonction validateFile() retourne avec constante l'APP, qui est le chemin de SERVER_ROOT/src/dans votre case.So la question est l'emplacement du fichier. Essayez de trouver sur votre localhost s'il existe même avec ce nom/chemin