php - returns - Cancelar un lado del servidor de solicitud HTTP POST
header set access-control-allow-origin "*" (6)
Apache se ocupa de la carga antes de invocar el script PHP, por lo que no podrá acceder a él.
Puede dividir el proceso en dos páginas (autenticación, página de carga de archivos) o, si necesita hacerlo todo en una página, use una solución AJAX-esque para cargar el archivo después de verificar los parámetros de autenticación.
Estoy intentando escribir un script para cargar archivos de gran tamaño (> 500MB). Me gustaría hacer algo de autenticación antes de que se procese la carga, por ejemplo:
$id = $_GET[''key''];
$size = $_GET[''size''];
$time = $_GET[''time''];
$signature = $_GET[''signature''];
$secret = ''asdfgh123456'';
if(sha1($id.$size.$time.$secret) != $signature){
echo ''invalid signature'';
exit;
}
process upload...
desafortunadamente php solo ejecuta este código después de que el archivo se haya cargado a un directorio temporal, ocupando valiosos recursos del servidor. ¿Hay alguna manera de hacer esto antes de que suceda la carga? He intentado cosas similares con perl / cgi pero sucede lo mismo.
Esto definitivamente no es posible dentro del script PHP que está cargando.
La posibilidad más simple es, de hecho, proporcionar autenticación un paso antes de que se realice la carga.
Si eso no es una opción, me viene a la mente una posibilidad un poco extravagante: utilizar un RewriteMap
y RewriteMap
a un programa externo (debería ser posible hacer que el programa sea un script PHP).
Usando RewriteMap
es posible reescribir una URL basada en la salida de un programa de línea de comando. Si usa esta directiva para llamar a un script PHP (separado), ¡no podrá usar la sesión del usuario, sin embargo! - Tendría acceso a los parámetros GET antes de que se procese la solicitud.
Si el proceso falla (= las credenciales no son válidas), puede redirigir la solicitud a un recurso estático que al menos evitaría que PHP se inicie. (Supongo que la carga cargará algunos recursos de todos modos, pero probablemente menos que si fuera redirigido a PHP).
¡No hay garantías de si esto funcionará! No tengo experiencia propia con RewriteMap
.
Esto se debe al hecho de que cada solicitud HTTP es una sola que contiene todos los datos de formulario / POST, incluidos los datos de carga del archivo.
Como tal, no creo que sea posible manejar una solicitud de carga de archivos de esta manera, independientemente del lenguaje de scripting que utilice.
No creo que puedas hacer esto. Lo mejor que puede hacer es ejecutar una función AJAX en Enviar para realizar su validación primero, y luego si es válida, ejecute la POST para cargar el archivo. Puede establecer $_SESSION
en su secuencia de comandos AJAX si la autenticación es válida, luego verifique esa sesión var en el script de carga para permitir la carga.
Por lo que sé, no puedes hacer eso en PHP. El script PHP se inicia en respuesta a una solicitud, pero una solicitud no se "envía" hasta que se carga el archivo, ya que el archivo que se carga es una parte de la solicitud.
Wow, ya hay 5 respuestas que dicen que no se puede hacer. mod_perl
al rescate , aquí puedes rechazar una solicitud antes de que todo el cuerpo de la solicitud se cargue.