我正在尝试使用HTML form.submit()
检索文件位置,并且代码完美运行并返回我使用硬编码DIR即'../../asdf/'
时所需的信息,但是当我使用PHP构建时在sys_get_temp_dir()
中,我在“'Unexpected Token "W"'
”行上收到错误data = JSON.parse( data );
,我尝试在get_temp_dir函数之后添加斜杠并且不添加斜杠(函数的已知错误) ),它们都产生相同的结果。有什么建议吗?
PHP:
<?php
$failed = false;
$images = array();
$uploadDir = sys_get_temp_dir() . '/';
if ($_SERVER['CONTENT_LENGTH'] < 8380000)
{
if (isset($_FILES['filesToUpload']) && $_FILES['filesToUpload']['error'] != 0)
{
foreach($_FILES['filesToUpload']['tmp_name'] as $key=>$value)
{
$file = $_FILES['filesToUpload']['name'][$key];
// allow only image upload
if(preg_match('#image#',$_FILES['filesToUpload']['type'][$key]))
{
//$tempFile = tempnam( $uploadDir, $file );
if(!move_uploaded_file($value, $uploadDir.$file))
{
$failed = true;
}
else
{
$images[] = $uploadDir . $file;
}
}
else
{
$images = array("error"=>"Sorry, only images are allowed to upload");
}
}
}
}
else
{
$images = array("error"=>"Sorry, Upload size exceed allowed upload size of 8MB");
}
if($failed == true)
{
$images = array("error"=>"Server Error<br/>Reported to Admin");
}
?>
<html>
<body>
<script type="text/javascript">
window.parent.Uploader.done('<?php echo json_encode($images); ?>');
</script>
</body>
</html>
使用Javascript:
var Uploader = (function ()
{
jQuery('#UploadFiles').on('change', function ()
{
jQuery('#UploadFiles').parent('form').submit();
});
var fnUpload = function ()
{
jQuery('#UploadFiles').trigger('click');
}
var fnDone = function (data)
{
alert( data );
var data = JSON.parse(data); //ERROR THROWN HERE.
if (typeof (data['error']) != "undefined")
{
jQuery('#UploadedImages').html(data['error']);
jQuery('#UploadFiles').val("");
return;
}
var pics = [];
for ( var i = 0; i < data.length; i++ )
{
pics.push("<img class='hidden' src='" + data[i] + "'/>");
}
modifyPictures( data );
jQuery('#UploadedImages').html(pics.join(""));
jQuery('#UploadFiles').val("");
$('#gallery').pikachoose();
}
return(
{
upload: fnUpload,
done: fnDone
})
}());
警报的结果:
["C:\Windows\TEMP/pause.png","C:\Windows\TEMP/thumb-back.png"]
答案 0 :(得分:0)
正如Felix Kling指出的那样,&#39; \&#39; sys_get_temp_dir()生成的字符不会在json_encode函数中替换,因此会导致JSON.parse()函数爆炸。这是我用来解决问题的循环(也用不同的字符处理其他几个类似的问题)。
$images = escapeJsonString( $images );
function escapeJsonString( $value )
{
# list from www.json.org: (\b backspace, \f formfeed)
$escapers = array("\\", "/", "\"", "\n", "\r", "\t", "\x08", "\x0c");
$replacements = array("\\\\", "\\/", "\\\"", "\\n", "\\r", "\\t", "\\f", "\\b");
$result = str_replace($escapers, $replacements, $value);
return $result;
}
echo json_encode( $images );