Une Bévue
2016-03-29 14:17:33 UTC
je souhaite transmettre à une page html une valeur en JSON obtenue par php.
le script php :
<?php
header('Content-Type: application/javascript');
function getVideoSize($file) {
$size = shell_exec("/usr/local/bin/exiftool -ImageSize $file");
$sizes = split(', ', preg_replace('/Image Size : (\d+)x(\d+)\s+/',
'$1, $2', $size), 2);
return ['src' => str_replace('/Users/yt/Sites', '', $file), 'width'
=> intval($sizes[0]), 'height' => intval($sizes[1])];
}
$dir = '/Users/yt/Sites/Videos/videos/';
$allowed_ext = array(".mp4", ".ogv", ".webm");
$files = [];
if ($handle = opendir($dir)) {
while (false !== ($file = readdir($handle)))
{
$file_lc = strtolower($file);
$ext = strrchr($file_lc, '.');
if (in_array($ext,$allowed_ext)) {
$files[] = getVideoSize($dir . $file);
}
}
closedir($handle);
}
echo "var files = " . json_encode($files, JSON_PRETTY_PRINT) . ";\n";
?>
si je regarde au navigateur directement la sortie de mon script php,
j'obtiens :
var files = [
{
"src": "\/Videos\/videos\/2015_03_20__18_58_47__MVI_2218.MP4",
"width": 640,
"height": 480
},
{
"src": "\/Videos\/videos\/2015_03_20__18_58_47__MVI_2218.webm",
"width": 640,
"height": 480
}
];
ce script est appellé, côté html, par :
<script src='/Videos/php/browse.php'></script>
maintenant, si je regarde le résultat obtenu, càd la variable "files"
par le javascript :
console.log("files = " + files);
donne :
files = [object Object],[object Object]
console.log("typeof files = " + typeof files);
donne :
typeof files = object
console.dir(files);
donne :
Array[2]
0: Object
height: 480
src: "/Videos/videos/2015_03_20__18_58_47__MVI_2218.MP4"
width: 640
1: Object
height: 480
src: "/Videos/videos/2015_03_20__18_58_47__MVI_2218.webm"
width: 640
càd que j'obtiens directement une array d'objets en javascript, sans
passer par JSON.parse, ce que je ne comprends pas.
d'ai lleurs, si j'essaie de parser le json par :
var truc = JSON.parse(files);
, j'obtiens une erreur :
VM5602:1 Uncaught SyntaxError: Unexpected token o
donc, en résumé, je ne comprends pas pourquoi avec
json_encode côté php, j'obtiens une liste d'objets côté javascript et
non une string à parser...
le script php :
<?php
header('Content-Type: application/javascript');
function getVideoSize($file) {
$size = shell_exec("/usr/local/bin/exiftool -ImageSize $file");
$sizes = split(', ', preg_replace('/Image Size : (\d+)x(\d+)\s+/',
'$1, $2', $size), 2);
return ['src' => str_replace('/Users/yt/Sites', '', $file), 'width'
=> intval($sizes[0]), 'height' => intval($sizes[1])];
}
$dir = '/Users/yt/Sites/Videos/videos/';
$allowed_ext = array(".mp4", ".ogv", ".webm");
$files = [];
if ($handle = opendir($dir)) {
while (false !== ($file = readdir($handle)))
{
$file_lc = strtolower($file);
$ext = strrchr($file_lc, '.');
if (in_array($ext,$allowed_ext)) {
$files[] = getVideoSize($dir . $file);
}
}
closedir($handle);
}
echo "var files = " . json_encode($files, JSON_PRETTY_PRINT) . ";\n";
?>
si je regarde au navigateur directement la sortie de mon script php,
j'obtiens :
var files = [
{
"src": "\/Videos\/videos\/2015_03_20__18_58_47__MVI_2218.MP4",
"width": 640,
"height": 480
},
{
"src": "\/Videos\/videos\/2015_03_20__18_58_47__MVI_2218.webm",
"width": 640,
"height": 480
}
];
ce script est appellé, côté html, par :
<script src='/Videos/php/browse.php'></script>
maintenant, si je regarde le résultat obtenu, càd la variable "files"
par le javascript :
console.log("files = " + files);
donne :
files = [object Object],[object Object]
console.log("typeof files = " + typeof files);
donne :
typeof files = object
console.dir(files);
donne :
Array[2]
0: Object
height: 480
src: "/Videos/videos/2015_03_20__18_58_47__MVI_2218.MP4"
width: 640
1: Object
height: 480
src: "/Videos/videos/2015_03_20__18_58_47__MVI_2218.webm"
width: 640
càd que j'obtiens directement une array d'objets en javascript, sans
passer par JSON.parse, ce que je ne comprends pas.
d'ai lleurs, si j'essaie de parser le json par :
var truc = JSON.parse(files);
, j'obtiens une erreur :
VM5602:1 Uncaught SyntaxError: Unexpected token o
donc, en résumé, je ne comprends pas pourquoi avec
json_encode côté php, j'obtiens une liste d'objets côté javascript et
non une string à parser...