Bild uploaden und in data.json dazuschreiben

hups1803

Erfahrenes Mitglied
Hallo,

ich habe folgendes Problem:

ich Uploade ein Bild und möchte das die daten in eine data.json geschrieben werden.

Leider bekomme ich das nicht so ganz hin.

hier die Upload.php

PHP:
// This is a simplified example, which doesn't cover security of uploaded images. 
// This example just demonstrate the logic behind the process. 


// files storage folder
$dir = '../img/uploads/';

$_FILES['file']['type'] = strtolower($_FILES['file']['type']);

if ($_FILES['file']['type'] == 'image/png' 
|| $_FILES['file']['type'] == 'image/jpg' 
|| $_FILES['file']['type'] == 'image/gif' 
|| $_FILES['file']['type'] == 'image/jpeg'
|| $_FILES['file']['type'] == 'image/pjpeg')
{   
    // setting file's mysterious name
    $filename = md5(date('YmdHis')).'.jpg';
    $file = $dir.$filename;

    // copying
    copy($_FILES['file']['tmp_name'], $file);

    // displaying file    
    $array = array(
        'filelink' => '/img/uploads/'.$filename,
        'thumb' => '/img/uploads/'.$filename,
        'image' => '/img/uploads/'.$filename,
    );



    echo stripslashes(json_encode($array));

    $json = stripslashes(json_encode($array)), "\n";
    $files = fopen('../img/uploads/images.json','a+');
    fwrite($files, $json . "\n");
    fclose($files);
}

die data .json soll so aussehen

PHP:
[
	{ "thumb": "json/images/1_m.jpg", "image": "json/images/1.jpg" },
	{ "thumb": "json/images/2_m.jpg", "image": "json/images/2.jpg" },
	{ "thumb": "json/images/3_m.jpg", "image": "json/images/3.jpg" }
	
]

wenn ich nun ein neues Bild uploade sieht es so aus

PHP:
[]
{"filelink":"json/images/1.jpg","thumb":"json/images/1.jpg","image":"json/images/1.jpg"}
{"filelink":"json/images/2.jpg","thumb":"json/images/2.jpg","image":"json/images/2.jpg"}
{"filelink":"json/images/3.jpg","thumb":"json/images/3.jpg","image":"json/images/3.jpg"}

leider bekomme ich es nicht in die eckigen klammern und das komma am ende bekomme ich auch nicht rein
 
Dazu musst deu dem Array die Keys wegnehmen. Das geht mit array_values().Wenn das Array keys hat, dann macht JSON diese in den String. Hat es nur einen numerischen Index, dann hast du das was du willst.
Ein Array mit Keys entspricht einem Objekt mit Eigenshaften.
PHP:
echo stripslashes(json_encode(array_values($array)));
 
Um die eckigen Klammern auch bei einem Array zu erzwingen (Die sind in JSON ein Objekt) musst du folgendes als zweiten Paramter bei der encode-Funktion setzen: JSON_FORCE_OBJECT
 
vielen dank,

habe nach rumbropieren und Googeln nun folgendes, welches auch geht.

ist das ok oder bekommen die Experten hier davon Augenkrebs?

PHP:
$file = "../json/data.json";
$json = json_decode(file_get_contents($file));
$json[] = array(
					'thumb' => 'json/images/'.$filename,
				    'image' => 'json/images/'.$filename,
				        	);

file_put_contents($file, json_encode($json));

ich frage mich grad ob man das auch mit einen scandir hinbekommen würde

habe mal folgendes versucht:

PHP:
$directory = "demo/json/images/";

$images = glob("".$directory."{*.jpg,*.JPG,*.PNG,*.png}", GLOB_BRACE);
foreach( $images as $key => $value){ 
                 
                 $arrayx= array(
				'thumb' => 'json/images/'.$value,
				 'image' => 'json/images/'.$value,
				       );

                 echo json_encode($arrayx,JSON_FORCE_OBJECT );              
                 
            }

die Ausgabe sieht so aus .
da fehlen die eckigen klammern,
es steht alles in einer reihe,
und das backslash ist da

PHP:
{"thumb":"json\/images\/demo\/json\/images\/1.jpg","image":"json\/images\/demo\/json\/images\/1.jpg"}{"thumb":"json\/images\/demo\/json\/images\/2.jpg","image":"json\/images\/demo\/json\/images\/2.jpg"}

Die Zweite Frage die sich da für mich stellt ist wie schreibe ich das in eine data.json
 
Hatte mich vertan, es ist genau andersrum, die geschweiften sind ein Objekt, die eckigen Klammern ein Array. Also ist diese Ausgabe nicht sonderbar.
In die Datei bekommst du es indem du anstatt echo() wieder file_put_conents() verwendest.

Die erste Variante sieht aber schon gut aus.
 
Zurück