2016-08-03 8 views
0

私は単純なテキストエディタを作って、今では画像アップロードと画像マネージャで作業しています。すべての画像を.jsonファイルに読み込むようにマネージャーを設定しました。これは問題なく動作します。問題は、PHPスクリプトが実際に新しく追加されたイメージをそのjsonに書き込むことです。私はjsonにディレクトリ内のすべてのファイルを書き込む

警告取得しています

$file = "images.json"; 
$arr_data = array(); 

foreach(glob('/uploads/*') as $image) { 
    $arr_data = array(
     'link' => $image, 
     'tag' => 'images', 
    ); 
} 

$jsondata = file_get_contents($file); 
$arr_data = json_decode($jsondata, true); 

array_push($arr_data,$jsondata); 

$jsondata = json_encode($arr_data, JSON_PRETTY_PRINT); 
file_put_contents($file, $jsondata)); 

:array_push()は、配列データが提供されていてもカントーパラメータ1は、配列

ことを期待しています。これを解決するには?

+0

Easies方法はにある新しい配列を上書きするためのファイルを初期化するためにこれを追加'$ arr_data'を出力してチェックしてください。そして、覚えておいてください - エラーがあなたに引数が配列ではないことを伝えるならば、それは本当は配列ではありません。 –

+0

あなたは空のファイル、つまりこのイメージファイルで始まっていますか? – RiggsFolly

+0

印刷後に空の配列が表示されます。はい、私は空のjsonファイルを持っています –

答えて

1

あなたは空のファイルすなわちimages.jsonで開始しているなら、あなたはこれらの2行

$jsondata = file_get_contents($file); 
$arr_data = json_decode($jsondata, true); 

を初めて実行するには、2行目は、おそらくブールに$arr_dataを変更します。 json_decode()nothingを配列に変換できません。

ので使用

<?php 
$file = "images.json"; 
file_put_contents($file, '[]'); // init the file 

ます。また$arr_data変数はそうもこれを修正再利用しているとあなたにも

$file = "images.json"; 
file_put_contents($file, '[]'); // init the file 

$arr_data = array(); 

foreach(glob('/uploads/*') as $image) { 
    // amended to not reuse $arr_data 
    // ameded to not overwrite the array as you build it 
    $new_arr[] = array('link' => $image, 'tag' => 'images'); 
} 

$jsondata = file_get_contents($file); 
$arr_data = json_decode($jsondata, true); 

array_push($arr_data,$new_arr); 

$jsondata = json_encode($arr_data, JSON_PRETTY_PRINT); 
file_put_contents($file, $jsondata)); 
+0

jsonファイルを編集し、プレースホルダ画像を追加しました。スクリプトを実行した後もまったく同じエラーが表示され、jsonファイルはnullに変更されました –

+0

また、変数の再利用を検出しました – RiggsFolly

+0

また、globから構築していた配列を上書きしていました – RiggsFolly

関連する問題