回声不返回我完整的生产字符串,而是在开发中工作



当我使用 Xampp 在本地主机上运行我的网站时,我没有这个错误,但在我的 ovh 服务器上这不起作用。

我解释道, 我有一个 ajax 函数,它等待文件名将他注入到应答器中。 我打电话给我的控制器,他给出了文件名并回应他。 所以我有一个 var php,它包含一个像"main-2765b74ec.jpg"这样的字符串。

我需要回声这个变量才能将他注射到我的应答器中。 在本地主机上,这项工作非常完美,但在我的 ovh 服务器中,echo 打印只是"main-2765b74ec"。

所以这就是我的问题,为什么 echo 不像我的本地主机环境那样给我完整的字符串。

也许是 ovh 的问题?

编辑:与print((相同的问题

使用 Ajax 进行 PHP 调用:

public function tmp($request, $response) {
$type = $request->getParam('name');
$uploadedFile = $request->getUploadedFiles()['img'];
$directory = dirname(dirname(__DIR__)) . '/public/img/tmp';
if ($uploadedFile->getError() === UPLOAD_ERR_OK) {
$filename = $this->moveUploadedFile($directory, $uploadedFile, $type);
echo $filename;
}
}

以上:如果我做一个var_dump这将返回带有扩展名的完整字符串,如果我做一个var_dump后跟一个回显,回显会返回完整的字符串,但我必须在我的 js 中做更多的 traite,以隐藏所有var_dump部分。

PHP谁的名 :

public function moveUploadedFile($directory, UploadedFile $uploadedFile, $type = 'any') {
$extension = strtolower(pathinfo($uploadedFile->getClientFilename(), PATHINFO_EXTENSION));
$basename = bin2hex(random_bytes(8));
$filename = sprintf('%s.%0.8s', $basename, $extension);
if ($type == 'main') {
$filename = $type.'-'.$filename;
if ($dh = opendir($directory)) {
while (($file = readdir($dh)) !== false) {
if ($file != '.' && $file != '..' && explode('-', $file)[0] == 'main') {
unlink($directory.'/'.$file);
}
}
closedir($dh);
}
} else if ($type != 'any') {
$filename = $type;
}
$uploadedFile->moveTo($directory . DIRECTORY_SEPARATOR . $filename);
return $filename;
}

阿贾克斯 :

function uploadFile(file) {
let id = $(file).attr('id').substr(5)
if (id != ('tmp')) {
$('#form_'+id).submit()
} else {
let formData = new FormData()
let params = $('#form_tmp').serializeArray()
formData.append('img', $(file)[0].files[0])
formData.append(params[0].name, params[0].value)
$('#label').html("Uploading...").css({'background-color': 'transparent', 'cursor': 'wait'})
$('#file_tmp').prop("disabled", true)
// for (var pair of formData.entries()) { console.log(pair[0]+ ', ' + pair[1]) }
$.ajax({
url: '../image/tmp',
method: 'post',
data: formData,
contentType: false, //'text/plain'
processData: false
}).done((filename) => {
closeOverlay()
if (params[0].value == 'main') {
$('.container-main-img').html('<img src="../img/tmp/'+filename+'" id="tmpImgMain">').css({'height':'auto', 'border': 'none'})
} else {
$('.img-list').append(`<div class="img-block">
<div class="toolbar img">
<div>
<button class="btn-tmp-img-up"><i class="icon-up-dir"></i></button>
<button class="btn-tmp-img-down"><i class="icon-down-dir"></i></button>
</div>
<button class="btn-tmp-img-delete"><i class="icon-cancel"></i></button>
</div>
<img src="../img/tmp/`+filename+`">
</div>`)
ajustBtnTool()
}
})
}   
}

当从 Ajax 调用的函数返回时,你必须使用 'exit' 或 'die((',所以在你的行 'echo $filename; 之后直接添加其中任何一个。

最新更新