El error que estás encontrando, "Unexpected end of JSON input", indica que el código JavaScript está intentando parsear una respuesta que no es un JSON válido desde tu script PHP (
prom.php). Esto puede ocurrir si hay un problema en la ejecución de PHP antes de que se envíe la respuesta JSON, como un error de PHP en el script.
Aquí hay algunas recomendaciones para solucionar el problema:
### 1. Manejar Errores de PHP
Asegúrate de que no haya otros errores o advertencias de PHP antes de enviar datos JSON. Puedes habilitar la visualización de errores en PHP agregando estas líneas al inicio de tu script:
PHP:
error_reporting(E_ALL);
ini_set('display_errors', 1);
Esto te ayudará a ver cualquier mensaje de error que pueda estar ocurriendo.
### 2. Código PHP Completo
Aquí te dejo el bloque de código que has proporcionado, con un manejo de errores más robusto. Asegúrate de que no haya errores antes de enviar la respuesta en JSON:
PHP:
if ($fileType === "video/mp4") {
if (is_uploaded_file($tmp_name)) {
sleep(1);
$base_name = mt_rand(1, 100) . bin2hex(random_bytes(mt_rand(5, 15))); // Base del nombre
$target_path = 'upload/' . $base_name . '.mp4'; // Ruta del video
if (move_uploaded_file($tmp_name, $target_path)) {
// Crear un preview del video
$preview_path = 'imguser/compressed/' . $base_name . '.webp'; // Ruta para la preview
$command_preview = "ffmpeg -i " . escapeshellarg($target_path) . " -ss 00:00:03.000 -vframes 1 " . escapeshellarg($preview_path);
exec($command_preview); // Ejecutar el comando FFmpeg para vista previa
// Comando para convertir y comprimir el video
$compressed_path = 'upload/compressed_' . $base_name . '.mp4'; // Ruta para video comprimido
$command_compress = "ffmpeg -i " . escapeshellarg($target_path) . " -vcodec libx264 -crf 28 " . escapeshellarg($compressed_path);
exec($command_compress); // Ejecutar el comando FFmpeg para compresión
unlink($target_path); // Borrar el video original
// Manejo de categorías
if ($_POST['category'] === "livs") {
$uploaded_files[0] = $compressed_path; // Agregar video a la lista
echo json_encode(['success' => 'Archivo subido correctamente', 'files' => $uploaded_files]); // Respuesta de éxito
break; // Salir del bucle
} else {
if (count($uploaded_files) < 20) {
$uploaded_files[] = $compressed_path; // Agregar a la lista
}
}
} else {
// Enviar error en formato JSON
echo json_encode(['error' => "Error al mover el archivo: " . $_FILES['fotoshop']['name'][$key]]);
exit; // Terminar la ejecución
}
} else {
echo json_encode(['error' => 'El archivo no fue subido correctamente.']);
exit;
}
} else {
echo json_encode(['error' => 'Tipo de archivo no soportado.']);
exit;
}
### 3. Manejo de la Respuesta en JavaScript
Asegúrate de que tu código JavaScript se maneje correctamente:
JavaScript:
fetch('prom.php', {
method: 'POST',
body: formData
})
.then(response => {
// Verifica si la respuesta es JSON
return response.text(); // Cambiar a text para manejar problemas de análisis
})
.then(data => {
try {
const jsonData = JSON.parse(data); // Intenta analizar el JSON
if (jsonData.error) {
console.log(jsonData.error); // Imprime el error en la consola
} else {
console.log('Archivo subido con éxito:', jsonData.files); // Archivos subidos
}
} catch (e) {
console.error('Error de análisis:', e, data); // Muestra el error
}
})
.catch(error => console.error('Error en la solicitud:', error));
### Resúmen
1. Habilita la visualización de errores de PHP para detectar problemas.
2. Asegúrate de que se envíen respuestas JSON válidas.
3. Maneja adecuadamente la respuesta en tu JavaScript.
Si encuentras más errores, por favor comparte lo que aparece en la consola o en los logs de tu servidor. ¡Espero que esto te ayude!
$uploaded_files = [];
// Verifica si hay archivos subidos
if (!empty($_FILES['fotoshop'])) {
foreach ($_FILES['fotoshop']['tmp_name'] as $key => $tmp_name) {
$fileType = $_FILES['fotoshop']['type'][$key];
$target_path = '';
// Manejo de videos
if ($fileType === "video/mp4") {
if (is_uploaded_file($tmp_name)) {
sleep(1);
$base_name = mt_rand(1, 100) . bin2hex(random_bytes(mt_rand(5, 15))); // Base del nombre
$target_path = 'upload/' . $base_name . '.mp4'; // Ruta del video
if (move_uploaded_file($tmp_name, $target_path)) {
// Crear un preview del video
$preview_path = 'imguser/compressed' . $base_name . '.webp'; // Ruta para la preview
$command_preview = "ffmpeg -i " . escapeshellarg($target_path) . " -ss 00:00:03.000 -vframes 1 " . escapeshellarg($preview_path);
exec($command_preview); // Ejecutar el comando FFmpeg para vista previa
// Comando para convertir y comprimir el video
$compressed_path = 'upload/compressed' . $base_name . '.mp4'; // Ruta para video comprimido
$command_compress = "ffmpeg -i " . escapeshellarg($target_path) . " -vcodec libx264 -crf 28 " . escapeshellarg($compressed_path);
exec($command_compress); // Ejecutar el comando FFmpeg para compresión
unlink($target_path); // Borrar el video original
// Manejo de categorías
if ($_POST['category'] === "livs") {
$uploaded_files[0] = $compressed_path; // Agregar video a la lista
break; // Salir del bucle
} else {
if (count($uploaded_files) < 20) {
$uploaded_files[] = $compressed_path; // Agregar a la lista
}
}
} else {
// Enviar error en formato JSON
echo json_encode(['error' => "Error al mover el archivo: " . $_FILES['fotoshop']['name'][$key]]);
exit; // Terminar la ejecución
}
}
}
// Manejo de imágenes (jpeg, png, jpg)
elseif ($fileType === "image/webp" || $fileType === "image/jpeg" || $fileType === "image/png" || $fileType === "image/jpg") {
$target_path = "imguser/" . mt_rand(1, 99999) . mt_rand(1, 1000) . $username . date("zihdYN") . ".webp";
if (move_uploaded_file($tmp_name, $target_path)) {
// Si la categoría es "livs", solo permitimos un archivo
if ($_POST['category'] === "livs") {
// Asignamos directamente el archivo a la primera posición de $uploaded_files
$uploaded_files[0] = $target_path; // Agregar imagen a la lista
break; // Salir del bucle después de subir un archivo
} else {
// Para otras categorías, se permiten múltiples archivos
if (count($uploaded_files) < 20) { // Verifica que no haya más de 3 archivos
$uploaded_files[] = $target_path; // Agregar imagen a la lista
}
}
}
}
}
if (count($uploaded_files) > 0) {
if (isset($_POST['category']) && $_POST['category'] === 'livs') {
$stricted = 'livs'; // Solo si hay un archivo y la categoría es 'livs'
} else {
$stricted = 'post'; // Para múltiples archivos o si la categoría no es 'livs'
}
} else {
if (isset($_POST['category']) && $_POST['category'] === 'share') {
$stricted = 'share';
}else{
$stricted = 'post';
}
}
// Procesar el resto de tu código para insertar en la base de datos
$querim = mysqli_query($conexion, "SELECT * FROM friends WHERE litefriends LIKE '%," . $id . ",%' AND username != '" . $username . "' ORDER BY id DESC");
$quid = '';
if (mysqli_num_rows($querim) === 0) {
$quid .= '0,';
}
$ino = 1;
while ($filo = mysqli_fetch_assoc($querim)) {
$pinta = $ino++;
$quala = mysqli_query($conexion, "SELECT * FROM profileuser WHERE username = '" . $filo['username'] . "' ORDER BY id DESC");
$qilo = mysqli_fetch_assoc($quala);
$quid .= '0,' . $qilo['id'] . ',';
}
$friendfly = str_replace(",0,", ",", $quid);
$mensajepro = $_POST['mensaje'];
$busquedapro2 = array('\\', ' ', '^', '`', '"', '~', '\n', '¡', '!', 'ñ', 'Ñ', 'ç', 'Ç', 'ú', 'ù', 'ü', 'û', 'Ú', 'Ù', 'Û', 'Ü', 'ó', 'ò', 'ö', 'ô', 'Ó', 'Ò', 'Ö', 'Ô', 'í', 'ì', 'ï', 'î', 'Í', 'Ì', 'Ï', 'Î', 'é', 'è', 'ë', 'ê', 'É', 'È', 'Ê', 'Ë', 'á', 'à', 'ä', 'â', 'ª', 'Á', 'À', 'Â', 'Ä');
$reemplazopro2 = array('/', ' ', '', '', '"', '', '<br>', '!', '!', 'n', 'N', 'c', 'C', 'u', 'u', 'u', 'u', 'U', 'U', 'U', 'U', 'o', 'o', 'o', 'o', 'O', 'O', 'O', 'O', 'i', 'i', 'i', 'i', 'I', 'I', 'I', 'I', 'e', 'e', 'e', 'e', 'E', 'E', 'E', 'E', 'a', 'a', 'a', 'a', 'a', 'A', 'A', 'A', 'A');
$mensaje = mysqli_real_escape_string($conexion, str_replace($busquedapro2, $reemplazopro2, str_replace("\xE2\x80\x8B", "", str_replace("\r\n", "<br>", $mensajepro))));
mysqli_query($conexion, "INSERT INTO posters (idshare,usershare,idviews, idseguis, category, hora, photo, photo2, photo3, photo4, photo5, photo6, photo7, photo8, photo9, photo10, photo11, photo12, photo13, photo14, photo15, photo16, photo17, photo18, photo19, photo20, nombre, apellido, username, email, descripts, fecha) VALUES ('".$_POST['idshare']."','".$_POST['usershare']."','0,', '" . $friendfly . "', '" . $stricted . "', '" . date("d-m-Y H:i:s") . "', '" . $photo1 . "', '" . $photo2 . "', '" . $photo3 . "', '" . $photo4 . "', '" . $photo5 . "', '" . $photo6 . "', '" . $photo7 . "', '" . $photo8 . "', '" . $photo9 . "', '" . $photo10 . "', '" . $photo11 . "', '" . $photo12 . "', '" . $photo13 . "', '" . $photo14 . "', '" . $photo15 . "', '" . $photo16 . "', '" . $photo17 . "', '" . $photo18 . "', '" . $photo19 . "', '" . $photo20 . "', '" . $nombre . "', '" . $apellido . "', '" . $username . "', '" . $email . "', '" . $mensaje . "', '" . date('d M Y') . "')");
$ultimo_id_insertado = mysqli_insert_id($conexion);
$tu_texto = $mensaje;
preg_match_all("/@[\w]+/", $tu_texto, $palabras_con_arroba);
foreach($palabras_con_arroba[0] as $palabra){
$chopo = mysqli_query($conexion,"SELECT * FROM profileuser where username='".str_replace('@', '', $palabra)."' ORDER BY id DESC limit 1");
if($loupa = mysqli_fetch_assoc($chopo) and $loupa['id'] !== $id){
$chopop = mysqli_query($conexion,"SELECT * FROM newnotification where frame='etiqueta' and username='".$username."' and idbug='".$ultimo_id_insertado."' ORDER BY id DESC limit 1");
if($comem = mysqli_fetch_assoc($chopop)){
mysqli_query($conexion,"UPDATE newnotification SET idsug=CONCAT(idsug,'".$loupa['id'].",') where idsug not like '%,".$loupa['id'].",%' and username='".$username."' and idbug='".$ultimo_id_insertado."'");
}elseif($comem['idbug'] !== $ultimo_id_insertado){
mysqli_query($conexion,"INSERT INTO
newnotification(hora,fecha,idbug,idsug,idviews,username,frame,mensaje) VALUES ('".date("d-m-Y H:i:s")."','".date('d M Y')."','".$ultimo_id_insertado."','0,".$loupa['id'].",','0,','".$username."','etiqueta','te ha etiquetado en una publicacion')");
}
}
}
}
echo json_encode(['success' => 'Archivo subido correctamente', 'files' => $uploaded_files]);
aqui todo esta bien?