BotBeta
Admin
Sigma
Verificado
Verificación en dos pasos activada
¡Usuario popular!
Suscripción a IA
Tu código PHP parece bastante completo y realiza varias funciones para manejar subidas de archivos, procesar imágenes y registrar información en una base de datos. Sin embargo, hay algunas consideraciones y posibles mejoras a tener en cuenta:$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 INTOnewnotification(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?
### Recomendaciones y Consideraciones:
1. Verificación de Errores de Carga:
Antes de procesar cada archivo, asegúrate de verificar si hay errores en la carga con
$_FILES['fotoshop']['error'][$key]. Esto te ayudará a identificar problemas específicos de la carga de archivos.
Insertar CODE, HTML o PHP:
php
if ($_FILES['fotoshop']['error'][$key] !== UPLOAD_ERR_OK) {
echo json_encode(['error' => 'Error en la carga del archivo']);
exit;
}
2. Escapado de Variables:
Siempre utiliza
mysqli_real_escape_string() al manejar datos de entrada para proteger tu aplicación contra inyecciones SQL. 3. Rutas de Archivos:
asegúrate de agregar "/" al inicio de las rutas de
preview_path y compressed_path para evitar problemas en la ruta.
Insertar CODE, HTML o PHP:
php
$preview_path = 'imguser/compressed/' . $base_name . '.webp'; // Añadir '/'
$compressed_path = 'upload/compressed/' . $base_name . '.mp4'; // Añadir '/'
4. Validar Tipos de Archivos:
Considera usar
in_array() para validar tipos de archivo en lugar de múltiples condiciones if.
Insertar CODE, HTML o PHP:
php
$valid_image_types = ['image/webp', 'image/jpeg', 'image/png', 'image/jpg'];
if (in_array($fileType, $valid_image_types)) {
// Manejo de imágenes
}
5. Limpieza del Código:
Evita repetir el código para asignar
$stricted. Podrías simplificarlo.
Insertar CODE, HTML o PHP:
php
if (count($uploaded_files) > 0) {
$stricted = ($_POST['category'] === 'livs') ? 'livs' : 'post';
} elseif (isset($_POST['category']) && $_POST['category'] === 'share') {
$stricted = 'share';
} else {
$stricted = 'post';
}
6. Comprobar el Éxito de las Consultas SQL:
Siempre es bueno comprobar si las consultas SQL se ejecutan correctamente, en caso contrario, puedes registrar el error.
Insertar CODE, HTML o PHP:
php
if (!mysqli_query($conexion, $tu_consulta)) {
echo json_encode(['error' => mysqli_error($conexion)]);
exit;
}
7. Limpieza de Contenido del Mensaje:
Tu método de limpieza de contenido en
$mensaje es un poco complicado. Asegúrate de entender qué caracteres deseas eliminar o reemplazar y si hay formas más simples de lograr lo mismo.8. Finaliza el Script Adecuadamente:
Asegúrate de que solo envíes la respuesta JSON al final del script y que no haya salidas antes de eso.
9. Uso de JSON:
Al final de tu script, asegúrate de que todas las salidas JSON sean también apropiadas al error (en caso de no subir archivos).
### Ejemplo de resultado después de hacer algunas de estas mejoras:
Aquí tienes un fragmento con algunas de las recomendaciones aplicadas:
PHP:
// Verifica si hay archivos subidos
if (!empty($_FILES['fotoshop'])) {
foreach ($_FILES['fotoshop']['tmp_name'] as $key => $tmp_name) {
$fileType = $_FILES['fotoshop']['type'][$key];
// Comprueba errores en la carga
if ($_FILES['fotoshop']['error'][$key] !== UPLOAD_ERR_OK) {
echo json_encode(['error' => 'Error en la carga del archivo']);
exit;
}
// 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 {
echo json_encode(['error' => "Error al mover el archivo: " . $_FILES['fotoshop']['name'][$key]]);
exit;
}
}
}
// Verificación de imágenes
elseif (in_array($fileType, ['image/webp', 'image/jpeg', 'image/png', 'image/jpg'])) {
...
}
}
}
// Agregar código para insertar en la base de datos
// Respuesta final
echo json_encode(['success' => 'Archivo subido correctamente', 'files' => $uploaded_files]);
Estas mejoras deben ayudar a que tu script sea más robusto y fácil de mantener. Si tienes más preguntas o necesitas más ayuda, ¡dímelo!


