Я реализую в своей системе dropzone.js для загрузки файлов на сервер или в Dropbox в зависимости от размера файла.
И я также использую сладкие оповещения для уведомлений.
Когда файл загружается на мой сервер зона сбросаработает правильно, но когда он загружается на дропбокс не возвращает никаких результатов
тест с файлами больше 6 Мб
и у них полоса загрузки не работает должным образом
HTML:
<form id = "cuadro" action = "" class = "dropzone">
</form>
<p id = "texto_carga" style = "color: #009688; display:none">Espera mientras se procesa el archivo...</p> JS:
<script type = "text/javascript">
var errors = false;
var Dropzone = new Dropzone("#cuadro", {
url: "../utilidades/pruebasupload.php?id=<?=$personaId?>&codigo=<?=$codigo?>",
acceptedFiles: ".EDF,.edf,.pdf,.PDF,.rar,.RAR,.jpg,.png,.gif",
maxFiles: 1,
error:function(){
errors = true;
},
processing:function(){
$('#texto_carga').show();
},
complete:function(){
if (errors){
swal({
title: 'Error al cargar el achivo!',
text: 'Ha ocurrido un error al intentar cargar el archivo. Póngase en contacto con el administrador del sistema',
type: 'error',
icon: 'error'
});
$('#texto_carga').hide();
}else{
swal({
title: 'Carga completa!',
text: 'Hemos cargado el archivo de la prueba exitosamente',
type: 'success',
icon: 'success'
});
$('#texto_carga').hide();
}
}
});
</script>PHP pruebasupload.php
require_once "../terceros/dropbox/vendor/autoload.php";
require_once '../clases/servidor_archivos_controller.php';
require_once '../clases/conexion.php';
use Kunnu\Dropbox\Dropbox;
use Kunnu\Dropbox\DropboxApp;
use Kunnu\Dropbox\DropboxFile;
$conexion = new conexion;
$_servidor = new servidorArchivos;
$data = $_servidor->buscarConexion();
$dropboxKey = "";
$dropboxSecret = "";
$acessToken = "";
$appName= "";
$megas = "";
if (empty($data)){
$megas = 200000;
}else{
$dropboxKey = $data[0]['Keyapp'];
$dropboxSecret = $data[0]['Secret'];
$acessToken = $data[0]['Token'];
$appName= $data[0]['Appname'];
$megas = $data[0]['Megas'];
$megas = ($megas * 1024) * 1024 ;
}
if ($tama[0]>$megas){
try{
//upload file to dropbox
$file = $dropbox->simpleUpload($tempFile,$nombredropbox, ['autorename' => true]);
//share a file
$response = $dropbox->postToAPI("/sharing/create_shared_link_with_settings", ["path" => $nombredropbox, "settings" => ['requested_visibility' => 'public']]);
$data = $response->getDecodedBody();
$link = $data['url'];
//save link to document in to DB
$query = "insert into pruebas_archivos (Codigo,Archivo,Ubicacion)values('$savecodge','$nombredropbox','2')";
$datos= $conexion->NonQuery($query);
http_response_code(200);
}catch(\EXCEPTION $e){
ERROR('001',$E);
http_response_code(400);
}
}else{
$targetPath = "../public/pruebas/";
$targetFile = $targetPath.$id ."_". $nombreCompleto; //5
move_uploaded_file($tempFile,$targetFile);
//save the url into DB
$query = "insert into pruebas_archivos (Codigo,Archivo,Ubicacion)values('$savecodge','$nombreCompleto','1')";
$conexion->NonQuery($query);
http_response_code(200);
}
}
function error($numero,$texto){
$ddf = fopen('error.log','a');
fwrite($ddf,"[".date("r")."] Error $numero: $texto\r\n");
fclose($ddf);
}Мне нужно, чтобы система возвращала 200, если она загрузила файл, или 400, если нет. но иногда файл был загружен правильно, но не возвращает никаких результатов
В смысле, что именно? Клиентская часть просто «зависает», а в completeобработчик вообще не заходит? Что-то другое? Что вы наблюдаете в сетевой панели инструментов разработчика браузера?
Я подготовил для вас демо. вы найдете его в тексте вопроса
Вы проверили директивы post_max_size и upload_file_maxsize в php.ini? ссылка
@DiogoSgrillo да, есть, allow_url_fopen On display_errors Off error_reporting E_ALL file_uploads On include_path .:/opt/alt/php72/usr/share/pear log_errors On mail.force_extra_parameters no value max_execution_time 10800 max_input_time 10800 memory_limit 128M open_basedir no value post_max_size 128M session.save_path /opt/alt/php72/var/lib/php/session short_open_tag On upload_max_filesize 1G
@DiogoSgrillo Но проблема не в этом. Это работает правильно. проблема возникает, когда я пытаюсь загрузить файл в дропбокс
Я только что попытался загрузить файл, используя вашу демку, и скрипт умер ровно на 30-й секунде. Вы используете FastCGI? Возможно, для параметра idle_timeout установлено значение 30 с.
Я не использую FastCGI, на самом деле я никогда не слышал об этом раньше. Как я могу это реализовать?






Я протестировал вашу демонстрацию и время от времени мог загружать файлы размером более 6 МБ. Иногда во время загрузки скрипт умирал ровно на 30-й секунде.
Таким образом, кажется, что логика вашего кода в порядке, но на вашем сервере происходит тайм-аут. Как вы уже указали, max_execution_time и max_input_time, кажется, правильно установлены (я бы дважды проверил с phpinfo();), но в зависимости от сервера, на котором вы работаете, у вас могут быть другие места для проверки.
httpd.conf the TimeOut.php-fpm, проверьте www.conf директиву request_terminate_timeout.fastcgi_read_timeoutподелились скриншотами файлов
Прежде всего, создайте файл phpinfo.php с помощью <?php phpinfo(); и проверьте вывод в браузере. Если значения отличаются от вашего отпечатка, вы должны найти правильный php.ini для редактирования. Если они равны, вместо этого вы должны найти конфиг на сервере (не на php, но, вероятно, на apache)
Что именно «не возвращает никаких результатов»? Ваш PHP-скрипт, кажется, отвечает либо кодом состояния 200, либо 400 в случае ошибки. Какие «результаты» вы ожидаете увидеть где именно сейчас?