0 votes

L'instance pour le fichier ne fonctionne pas dans cakephp

Je reçois l'erreur suivante

  Array to string conversion [CORE/cake/libs/file.php, line 96]
      $path =   array(
"name" => "23_50_11[1].gif",
"type" => "image/gif",
"tmp_name" => "/tmp/phpbBWxAT",
"error" => 0,
"size" => 25230
  )

 $create    =   false
 $mode  =   493

     dirname - [internal], line ??
  File::__construct() - CORE/cake/libs/file.php, line 96
    FormsController::add() - APP/controllers/forms_controller.php, line 528
   Object::dispatchMethod() - CORE/cake/libs/object.php, line 117
     Dispatcher::_invoke() - CORE/cake/dispatcher.php, line 245
  Dispatcher::dispatch() - CORE/cake/dispatcher.php, line 211
  require - APP/webroot/index.php, line 88
 [main] - CORE/index.php, line 61

Notice (8): Array to string conversion [CORE/cake/libs/file.php, line 97]

   $path    =   array(
"name" => "23_50_11[1].gif",
"type" => "image/gif",
"tmp_name" => "/tmp/phpbBWxAT",
"error" => 0,
"size" => 25230
   )
$create =   false
  $mode =   493

 is_dir - [internal], line ??
 File::__construct() - CORE/cake/libs/file.php, line 97
 FormsController::add() - APP/controllers/forms_controller.php, line 528
 Object::dispatchMethod() - CORE/cake/libs/object.php, line 117
Dispatcher::_invoke() - CORE/cake/dispatcher.php, line 245
 Dispatcher::dispatch() - CORE/cake/dispatcher.php, line 211
 require - APP/webroot/index.php, line 88
  [main] - CORE/index.php, line 61

Warning (2): basename() expects parameter 1 to be string, array given [CORE/cake/libs/file.php, line 98]

Le code que j'ai utilisé est le suivant

 <h1>Form Fill</h1>
 <?=$form->create('Form',array('type'=>'file'));?>
  <?=$form->input('date',array('label'=>'Publication Date '));?>
  <?=$form->input('headline');?>
 <?=$form->input('content');?>
 <?=$form->input('image',array('type'=>'file'));?>
 <?=$form->end('Submit');?>

dans le contrôleur de formulaires function add($formid) [ ] echo "Imaage ".$this->data['Form']['image'];// affiche le tableau d'images

               if ($this->data['Form']['image']) {

            $file = new File($this->data['Form']['image']);// this is not working 

            //$ext = $file->ext();

            //echo "Extension ".$ext;
            echo "Fiel ".$file;

            $date = $this->data['Form']['date'];
            $filename = $date['year'].'-'.$date['month'].'-'.$date['day'].'-form-image.'.'gif';

            $data = $file->read();

            echo "Data ".$data;
            $file->close();

            $file = new File(WWW_ROOT.'/img/'.$filename,true);
            $file->write($data);
            $file->close();
            }

     }

L'instance pour le fichier ne fonctionne pas ? J'ai essayé de télécharger une image FILE et j'utilise une machine Ubuntu linux.

2voto

deceze Points 200115

Pour résumer :

$this->data['Form']['image']; // shows me the Imaage Array

$file = new File($this->data['Form']['image']); // this is not working

Erreur : Tableau conversion en chaîne de caractères

Le problème :

new File() attend un string comme argument, mais vous lui donnez une valeur de array .

Solution :

Fournir une chaîne de caractères comme argument pour new File() de préférence le chemin d'accès au fichier :

$file = new File($this->data['Form']['image']['tmp_name']);

Pour être un peu plus précis et vous aider à résoudre ce genre de problèmes vous-même la prochaine fois (espérons-le), il ne s'agit pas en fait de File qui attend un argument de type chaîne de caractères. Si vous regardez à nouveau la trace :

dirname - [internal], line ??
File::__construct() - CORE/cake/libs/file.php, line 96
FormsController::add() - APP/controllers/forms_controller.php, line 528
...

Cela signifie que le problème s'est produit en dirname qui est une fonction interne de PHP. Elle a été appelée à la ligne 96 dans File::__construct qui est à son tour appelé par FormsController::add etc. pp.

Comme PHP est un langage dynamique, il ne se bloque pas complètement lorsque vous fournissez des arguments d'un type incorrect. Il essaiera plutôt d'en tirer le meilleur parti et de convertir un tableau en chaîne de caractères, et vous notifiera qu'il l'a fait avec la commande Notice (8): Array to string conversion . Puisque le résultat d'une Array -> String est littéralement la chaîne de caractères "Array", votre programme va généralement se planter plus tard, puisque vous essayez maintenant de faire des choses comme is_dir("Array") ce qui est un non-sens.

Comme vous pouvez le constater, le programme se poursuit, avec un certain nombre d'avis et d'informations. basename() à la ligne 98, même en se plaignant un peu plus fort avec un Warning :

94: function __construct($path, $create = false, $mode = 0755) {
95:    parent::__construct();
96:    $this->Folder =& new Folder(dirname($path), $create, $mode);
97:    if (!is_dir($path)) {
98:        $this->name = basename($path);

Warning (2): basename() expects parameter 1 to be string, array given [CORE/cake/libs/file.php, line 98]

Maintenant, il serait de bon ton que File de vérifier si le paramètre est en fait une chaîne de caractères ou non et d'échouer gracieusement, mais il ne le fait pas. En tant que développeur, vous devez lire la documentation pour savoir ce que la fonction attend. Si ce n'est pas sur le site web, regardez directement dans le fichier /cake/libs/file.php :

/**
 * Constructor
 *
 * @param string $path Path to file
 * @param boolean $create Create file if it does not exist (if true)
 * @param integer $mode Mode to apply to the folder holding the file
 * @access private
 */
 function __construct($path, $create = false, $mode = 0755) {
     ...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X