2009-10-21 6 views
0

Je reçois l'erreur commeinstance pour le fichier ne fonctionne pas dans CakePHP

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 je l'ai utilisé est,

<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 la fonction add Formscontroller (formid $) { echo "imaage" $ this-> data [ 'form'] [ 'image'];. // me montre le tableau imaage

   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? Aidez-moi, s'il vous plaît . en fait Im essayant de télécharger l'image et im en utilisant FIle machine Linux Ubuntu ..

Répondre

2

Pour récapituler:

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

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

Error:Array to string conversion

Le problème:

new File() attend un string comme argument, mais vous le donnez un array.

Solution:

offre une chaîne comme argument pour new File(), de préférence le chemin du fichier:

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

Pour être un peu plus détaillée et vous aider à résoudre ce genre de problèmes vous-même la prochaine fois (heureusement), ce n'est pas vraiment File qui attend un argument de chaîne. Si vous regardez la trace à nouveau:

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

Cela dit le problème a effectivement eu lieu dans dirname, qui est une fonction interne PHP. Il a été appelé sur la ligne 96 dans File::__construct, qui à son tour a été appelé à partir de FormsController :: add etc. pp

Puisque PHP est un langage dynamique, il ne se termine généralement pas complètement lorsque vous fournissez des arguments du mauvais type. Au contraire, il va essayer de tirer le meilleur parti et essayer de convertir un tableau en une chaîne, et juste vous notifier qu'il l'a fait avec Notice (8): Array to string conversion. Comme le résultat d'une conversion Array -> String est littéralement la chaîne "Array", votre programme sera généralement plus tard, car vous essayez maintenant de faire des choses comme is_dir("Array"), ce qui est un non-sens.

Comme vous pouvez le voir le programme se bat réellement sur, avec quelques avis et basename() en ligne 98 plaignent même un peu plus difficile 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 bon style pour File pour vérifier si le paramètre est réellement une chaîne ou pas et échouer gracieusement, mais cela ne dérange pas. Parce que, en tant que développeur, vous devriez lire la documentation pour voir ce que la fonction attend. Si ce n'est pas sur le site, 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) { 
    ... 
Questions connexes