example - ¿Error de PHP move_uploaded_file()?
upload image php example (11)
¿Cómo puedo saber cuál es el problema?
Fácil. Consulte el registro de errores del servidor web.
¿cómo puedo obtener el problema real para mostrar al usuario?
NUNCA hazlo.
Un usuario promedio no tendrá constancia de este error.
Un usuario malintencionado no debería recibir comentarios, especialmente en forma de mensaje de error muy informativo.
Solo muestra una página con excusas.
Si no tiene acceso al registro de errores del servidor, su tarea se volverá más complicada.
Hay varias maneras de ponerse en contacto con mensajes de error.
Para mostrar mensajes de error en la pantalla, puede agregar estas líneas al código
ini_set(''display_errors'',1);
error_reporting(E_ALL);
o para hacer un archivo de registro de error personalizado
ini_set(''log_errors'',1);
ini_set(''error_log'',''/absolute/path/tp/log_file'');
y hay algunas otras formas.
pero debes entender que sin un mensaje de error real no puedes moverte. Es difícil ser ciego en la oscuridad
Utilizo el siguiente código y está cargando archivos con éxito en mi máquina local. Está mostrando "Cargado correctamente" en mi máquina local.
// Upload file
$moved = move_uploaded_file($_FILES["file"]["tmp_name"], "images/" . "myFile.txt" );
if( $moved ) {
echo "Successfully uploaded";
} else {
echo "Not uploaded";
}
Pero cuando utilicé este código en mi servidor en línea, entonces no está cargando el archivo y simplemente mostrando el mensaje "No cargado".
¿Cómo puedo saber cuál es el problema y cómo puedo obtener el problema real para que se muestre al usuario?
¿Comprueba que el archivo se cargue bien? Quizás superaste max_post_size o max_upload_filesize. Cuando inicie sesión usando FileZilla está copiando archivos como usted, cuando cargue por PHP ya que este archivo es del usuario que ejecuta Apache (por ejemplo, www-data), intente poner chmod 755 para las imágenes.
Compruebe que el servidor web tenga permisos para escribir en el directorio "images /"
Edite el código para que sea el siguiente:
// Upload file
$moved = move_uploaded_file($_FILES["file"]["tmp_name"], "images/" . "myFile.txt" );
if( $moved ) {
echo "Successfully uploaded";
} else {
echo "Not uploaded because of error #".$_FILES["file"]["error"];
}
Le dará uno de los siguientes valores de código de error 1 a 8:
UPLOAD_ERR_INI_SIZE = Valor: 1; El archivo cargado excede la directiva upload_max_filesize en php.ini.
UPLOAD_ERR_FORM_SIZE = Valor: 2; El archivo cargado excede la directiva MAX_FILE_SIZE que se especificó en el formulario HTML.
UPLOAD_ERR_PARTIAL = Valor: 3; El archivo cargado solo se cargó parcialmente.
UPLOAD_ERR_NO_FILE = Valor: 4; Ningun archivo fue subido.
UPLOAD_ERR_NO_TMP_DIR = Valor: 6; Falta una carpeta temporal. Introducido en PHP 5.0.3.
UPLOAD_ERR_CANT_WRITE = Valor: 7; Error al escribir el archivo en el disco. Introducido en PHP 5.1.0.
UPLOAD_ERR_EXTENSION = Valor: 8; Una extensión de PHP detuvo la carga del archivo. PHP no proporciona una forma de determinar qué extensión causó que se detenga la carga del archivo; examinar la lista de extensiones cargadas con phpinfo () puede ser útil.
En el alojamiento virtual, verifique su disk quota
.
si la cuota excede, move_uploaded_file
return error.
PD: he estado buscando esto por mucho tiempo :)
Por favor verifique el directorio "images /" de permisos
Prueba esto:
$upload_dir = $_SERVER[''DOCUMENT_ROOT''] . "/images/";
if (is_dir($upload_dir) && is_writable($upload_dir)) {
// do upload logic here
} else {
echo ''Upload directory is not writable, or does not exist.'';
}
Esto marcará instantáneamente cualquier error de permiso de archivo.
Verifique que su etiqueta de form
tenga este atributo:
enctype="multipart/form-data"
o ejecute suexec y nunca tenga que cambiar los permisos nuevamente.
move_uploaded_file()
devolverá:
-
FALSE
si el nombre del archivo no es válido -
FALSE
yissue a warning
en el registro de errores si el proceso de apache no tiene permisos de lectura / escritura para los directorios de origen o de destino
Registro de errores de PHP
Mi registro de error php estaba en: /var/log/httpd/error_log
y tenía estos errores:
Advertencia: move_uploaded_file (images / robot.jpg): no se pudo abrir la secuencia: Permiso denegado en /var/www/html/mysite/mohealth.php en la línea 78
Advertencia: move_uploaded_file (): no se puede mover ''/ tmp / phpsKD2Qm'' a ''images / robot.jpg'' en /var/www/html/mysite/mohealth.php en la línea 78
move_uploaded_file()
intenta mover archivos de un directorio temporal a un directorio de destino. Cuando el proceso de Apache intentaba mover archivos, no podía leer el temporal o escribir en el directorio de destino.
Encuentre qué usuario está ejecutando Apache (Servidor web) Compruebe qué usuario está ejecutando el servicio apache con este comando:
ps aux | grep httpd
ps aux | grep httpd
. La primera columna es el nombre de usuario.Compruebe el permiso de lectura en la dirección temporal: puede encontrar la ruta a su directorio temporal llamando a
echo sys_get_tmp_dir();
en una página php. Luego, en la línea de comando, emitals -ld /tmp/temporary-dir
para ver si el usuario de apache tiene acceso para leer aquíCompruebe el permiso de escritura en Destination Dir: emita
ls -ld /var/www/html/destination-directory
para ver si el usuario de apache tiene acceso para escribir aquíAgregue permisos según sea necesario usando
chown
ochgrp
Reinicie Apache usando el
sudo service httpd restart
$uploadfile = $_SERVER[''DOCUMENT_ROOT''].''/Thesis/images/'';
$profic = uniqid(rand()).$_FILES["pic"]["name"];
if(is_uploaded_file($_FILES["pic"]["tmp_name"]))
{
$moved = move_uploaded_file($_FILES["pic"]["tmp_name"], $uploadfile.$profic);
if($moved)
{
echo "sucess";
}
else
{
echo ''failed'';
}
}