web-dev-qa-db-fra.com

fichier_put_contents: échec de l'ouverture du flux, fichier ou répertoire de ce type

J'essaie d'utiliser dompdf pour enregistrer un formulaire dans un fichier .pdf facilement lisible. Mon script de traitement est présenté ci-dessous. Je reçois l'erreur Warning: file_put_contents(/files/grantapps/NAME0.pdf) [function.file-put-contents]: failed to open stream: No such file or directory in /home/username/public_html/subdir/apps/dompdf/filename.php on line 39. (La ligne 39 est la dernière ligne de mon script complet.) Je ne sais pas comment résoudre ce problème.

allow_url_fopen est activé et j'ai essayé toutes sortes de chemins de fichiers, y compris le répertoire complet (/home/username/public_html/subdir/files/grantapps/) et le contenu du code ci-dessous, mais rien n'a fonctionné.

require_once("dompdf_config.inc.php");
date_default_timezone_set('America/Detroit');

$html = 'code and whatnot is here';

$name = str_replace(" ", "", $_POST['form2name']);
$i = 0;
$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->render();
while(file_exists("files/grantapps/" . $name . $i . ".pdf")) {
    $i++;
}
file_put_contents("files/grantapps/" . $name . $i . ".pdf", $dompdf->output());
9
vaindil

Il y a définitivement un problème avec le chemin du dossier de destination.

Votre message d'erreur ci-dessus indique qu'il souhaite mettre le contenu dans un fichier du répertoire /files/grantapps/, qui dépasserait votre vhost, mais quelque part dans le système (voir la barre oblique absolue)

Vous devriez vérifier:

  • Le répertoire /home/username/public_html/files/grantapps/ est-il vraiment présent?.
  • Contient votre boucle et votre déclaration file_put_contents le chemin absolu /home/username/public_html/files/grantapps/
32
SomeoneYouDontKnow

J'étais aussi coincé dans le même genre de problème et je suis la simple étape->

il suffit d’obtenir l’URL exacte du fichier dans lequel vous voulez copier Ex->

http://www.test.com/test.txt (file to copy)

et passez le chemin exact du dossier absolute avec le nom de fichier où voulez-vous écrire ce fichier? 

1-> Si vous êtes sous Windows, alors d:/xampp/htdocs/upload/test.txt Et

2-> Si vous êtes sur une machine Linux, alors /var/www/html/upload/test.txt

et vous pouvez obtenir la racine du document par la fonction PHP ->

$_SERVER['DOCUMENT_ROOT']
5
Sachin

J'ai rencontré ce problème hier et je ne sais pas comment je l'ai résolu, mais voici comment j'ai procédé.

Mon chemin était "/ tmp/transtel/importReleaseDisk /" et j'ai rencontré l'erreur; donc pour commencer à résoudre le problème, j’écrivis mon fichier dans le répertoire parent principal puis allai plus loin.

file_put_contents("/tmp/aa.txt", "aaa");
file_put_contents("/tmp/transtel/aa.txt", "aaa");
file_put_contents("/tmp/transtel/importReleaseDisk/aa.txt", "aaa");

Résolu le problème idk pourquoi ...

Assurez-vous d'avoir les bonnes autorisations. Php normalement vous remarque quand vous ne pouvez pas écrire à cause du manque de droits mais vous ne savez jamais ...

0
Erwan Clügairtz