Informática, Tipos de arquivos
PHP: subida de arquivos ao servidor
Descarga de ficheiros PHP - un caso moi interesante, ao cal debe ser abordado con moito coidado. En internet podes atopar varios exemplos da aplicación de subida de arquivos, pero non todos son bos e as normas de seguridade.
Estas cousas teñen traer a unha conclusión, aínda que leva un longo tempo. Se deixa un oco no código, a continuación, todo o servidor pode ser comprometida.
seguridade
Con PHP arquivo subir ao servidor se realiza con bastante facilidade. O código é moi curta e sinxela. Só un par de liñas. Sen embargo, este método é perigoso. Moito máis tempo e liñas de código afastado para a seguridade.
O perigo é que, se non fai inspeccións, calquera atacante pode subir os seus scripts no seu servidor. Neste caso, terá acceso completo. Pode facer o que quere:
- exclúa a base de datos;
- borrar arquivos locais;
- modificar ficheiros locais;
- Agregar a súa publicidade para a súa web,
- descargar virus;
- redireccionar todos os usuarios nos seus sitios;
- e moitas outras cousas que veñen á mente atacante.
Ten que sempre comprobar que intenta descargar un ficheiro para o usuario. Por exemplo, se se preme só imaxes, é necesario comprobar se o ficheiro é unha imaxe con precisión. Se non, vai baixar nada.
Exactamente como aplicar a comprobación, será mostrado, co guión exame directo para cargar ficheiros.
Creando un formulario PHP
formulario de carga do ficheiro é moi sinxelo. Falta botóns botón Buscar e subida.
Describe como crear formas non vai, porque é fácil. Outras instrucións asumen que xa ten os conceptos básicos de HTML (se non, non estaría buscando información sobre a descarga en PHP).
Pero teña en conta que os datos no formulario que precisa engadir o atributo enctype.
En caso contrario, os datos sobre manipulador de ficheiro non serán transmitidos.
Como debe funcionar?
Despois diso, será necesario para recibir un camiño onde o arquivo reside.
Se o camiño non aparecer, executa a acción de novo.
Despois de facer clic no manipulador de arquivo de descarga pode dar calquera información.
Por exemplo, pode escribir a liña que indica que o ficheiro é "fulano de tal", o nome foi enviada con éxito á carpeta "tal e tal". Por suposto, o nome do ficheiro dado sempre diferente.
Normalmente, esta información é utilizada para depurar o código. Así, é posible comprobar que os datos son transmitidos e as gravacións ocorren no directorio desexado. É dicir, mesmo o nome do ficheiro non é indicada. Xa que esta información extra que o usuario non ten.
Ten sentido para a saída o nome só se o usuario fai a descarga de varios arquivos. Tal é o caso, considerada un pouco máis. Non imos chegar á fronte de nós mesmos.
axuste
En PHP carga do ficheiro para o servidor require certas opcións, o que debe ser feito no ficheiro php.ini. Este ficheiro contén unha gran cantidade de opcións. Eles todo o que non precisa. Estamos interesados en tres liñas: file_uploads upload_tmp_dir e upload_max_filesize.
Teña en conta que esta configuración afectarán a todos os seus sitios no servidor, non é calquera. Polo tanto, para axustar o tamaño máximo baseado no feito de que terá que cargar os usuarios. Non se recomenda para definir moi grande.
Unha vez que cambiar os valores destes parámetros, ten que reiniciar o servidor. En caso contrario, a configuración non terán efecto, como se le no momento da carga do servidor.
Podes facelo na consola conectando vía SSH ao servidor. Escriba o httpd restart servizo de mando e, a continuación, as opcións non terán efecto.
Outro método - un reinicio mediante ISP do panel ou a través de proveedor de panel de facturación.
arquivo de matriz
En PHP carga do ficheiro é feito polo array $ _FILES. Contén toda a información sobre os arquivos que baixar.
A ver que información está contida na matriz, o suficiente para escribir no manipulador seguinte ficheiro.
Seleccione calquera ficheiro e prema en "Enviar". Na páxina manipulador pode amosar a información que son almacenadas $ _FILES. A variable é escrito enteiramente en maiúsculas. PHP - un sensible ao idioma.
Como verás, nesta matriz ten unha morea de campos. Todos son importantes para nós. O primeiro campo contén o nome do ficheiro na forma en que se usa no seu ordenador.
A columna tipo especificado tipo de ficheiro. Tmp_name campo corresponde ao nome do ficheiro temporal. Tras o final do guión serán eliminados.
O campo de erro contén un código de erro. Este foi un pouco máis lonxe. Tamaño - o tamaño en bytes.
erros
Realizado mediante o carga de arquivo PHP é sempre acompañada por un código de erro. Unha mensaxe de erro inscrita no "erro". O erro de pantalla é cero.
Considere o valor de todos os erros:
Aquí está un exemplo de formulario para descargar o arquivo, o que indica un límite do valor do arquivo enviado.
script de carga de ficheiros: PHP
Como todos realizados na práctica? En PHP carga do ficheiro ocorre comando de copia. Se che interesa na cuestión de como baixar un arquivo, a resposta é de copia simple, que usa dous parámetros - o ficheiro de orixe eo ficheiro de destino.
Pero, como dito enriba, non pode ser limitado por motivos de seguridade. Por exemplo, vexa o tipo de ficheiro que nós enviamos, pode utilizar o tipo de campo no array $ _FILES. En primeiro lugar, imos tratar coa inspección, e despois pasar ao guión completo
Digamos que quere permitir que os usuarios fagan carga de unha foto cunha resolución de só GIF, JPEG ou PNG. Indican que pode ser así.
if ($ _ FILES [ 'file_upload'] [ 'type']! = "image / gif") {
echo "Sentímolo, só soporta a descarga Gif-Files";
saída;
}
Se queres enviar as 3 tipos, só tes que engadir unha condición adicional para o outro tipo de imaxe.
A copia é feita así: copia (imaxe 1, imaxe 2).
No noso caso, cando o traballo é descargar dende o PC para o servidor, pode facelo
copia ($ _ FILES [ 'file_upload'] [ "tmp_name"], "1.jpg")
É dicir, o arquivo será copiado co nome 1.jpg. Iso non é enteiramente correcto. Neste caso, é só un exemplo. O nome do ficheiro é sempre necesario especificar diferente, e especificar a extensión en función do arquivo.
Determinar a extensión pódense formas diferentes. Todo depende do creador de erudición. Unha das formas máis rápidas para (a diferenza de décimas de segundos) determinar a extensión - este é o seguinte código.
$ Path_info = pathinfo ($ _ FILES [ 'photo1'] [ "nome"]);
$ Ext = $ PATH_INFO [ 'extensión'];
A variable $ a ext imos gardar o ramal que desexe. Un nome de ficheiro pode ser definido de forma aleatoria usando md5. Se desexa descargar unha morea de arquivos, é mellor envialas a carpetas diferentes. Por iso, será máis cómodo. En particular, se quere borrar.
para descargar o código será a seguinte.
/// con foto
if ($ _FILES [ 'photo1'] [ 'tmp_name'] == null)
{
echo ( "
de ficheiro descoñecido. strong> p> Volver ... p> "); saída; } ///. Digamos que para calquera proxecto no servidor ten permiso para cargar arquivos grandes (vídeo), pero hai só imaxes, e os usuarios precisan para limitar if (($ _FILES [ "photo1"] [ "tamaño"]> 1024 * 1024 * 2) { > o tamaño máximo permitido de Volver ... p> saída; } // crear carpetas // crear un cartafol do mes actual if (! file_exists ( "img /". date ( "M"))) { Mkdir ( "img /" data ( "M").); } // crear un cartafol do día actual if (! file_exists ( "img /". date ( "M"). "/". date ( "D"))) { mkdir ( "img /" data ( "M") "/" data ( "D") ...); } /// extensión de arquivo $ Path_info = pathinfo ($ _ FILES [ 'photo1'] [ "nome"]); $ Ext = $ PATH_INFO [ 'extensión']; /// xerar nome $ Id = MD5 (data ( "AMD")); if (copia ($ _ FILES [ 'photo1'] [ "tmp_name"], "img /". date ( "M"). "/". date ( "D"). "/". $ id. $ ext) ) { echo ( "Arquivo cargado correctamente"); } /// calquera acción adicional (entrada na base de datos, e así por diante. N.) } Cargando múltiples arquivos (PHP) ocorre por medio de campos adicionais no formulario. Este método non é moi bo, xa que limita o número de arquivos para descargar. Ademais, é considerada mala forma na programación. Probe facer todo dinámico. A opción ideal - é a elección dun gran número de arquivos dunha soa vez premendo un só botón. Para iso, cree unha forma como este código. varios arquivos
P>
Form>
Nótese que a adición múltiple da palabra, eo nome é dada como unha matriz []. Neste caso, array $ _FILES será un pouco diferente. Vai obter unha matriz de matriz.
Para probar pode usar de novo o var_dump ($ _ FILES);
Todos os seus arquivos serán colocados na matriz como este:
- $ _FILES [ "arquivo1"] [ "nome"] [0]
- $ _FILES [ "arquivo1"] [ "nome"] [1]
- E así por diante.
Entre parénteses escrito o número do ficheiro na matriz. Contando desde cero. Nós tratalos do mesmo xeito, só tes que preguntar o ciclo e entrando en contacto co código antes descrito, a finais do índice de incorporación [$ i].
$ I = 0;
while ($ _FILES [ "arquivo1"] [ "nome"] [$ i] <> '')
{
/// pegar o código anteriormente
}
Así, terá que pasar a través dun subida de arquivos PHP ao servidor nun ciclo sen repetición innecesaria do código, como é xeralmente o caso, se usa a versión cun número estático de arquivos (última foto).
Similar articles
Trending Now