Verifique o tipo de arquivo (FLV) antes do arquivo de upload do PHP na pasta temporária, lendo somente o início de 3 bytes de arquivo

Os primeiros 3 bytes do arquivo FLV são assinatura “FLV”. Agora, minha pergunta:

Existe alguma possibilidade no PHP de lidar com uploads de arquivos para que possamos se conectar ao stream de input do arquivo de upload e verificar os primeiros 3 bytes?

O cenário é que eu não quero que o arquivo completo seja carregado (na pasta temporária) e, em seguida, verifique se o arquivo é FLV ou não, eu só quero ler os primeiros bytes de upload do stream e, se não for “FLV”, então retorno / saída.

O arquivo precisa ser carregado por formulário baseado em HTML. Não pode confiar no javascript, no upload de flash ou em qualquer solução de validação do lado do cliente, ou seja, precisa de uma solução pura baseada em PHP.

Eu já sei que o PHP não entrega o controle ao nosso script até terminar o upload do arquivo na pasta temporária e preencher variables ​​globais, ou seja, $_POST $_GET $_FILES etc.

Também há uma questão algo semelhante aqui: como carregar um byte de arquivo por byte no php

mas as respostas não satisfazem o meu requisito / pergunta.

Todas as ideias são realmente apreciadas!

obrigado

Primeiro, configure session.upload_progress.enabled no seu php.ini .

Em seguida, use session.upload_progress para rastrear o número de bytes carregados. Depois de atingir o limite mínimo, verifique o arquivo temporário que está sendo carregado, será em $_SESSION[unique_key]['files'][0]['tmp_name'] . Se o arquivo não corresponder, configure $_SESSION[unique_key]["cancel_upload"] para TRUE , e o arquivo será rejeitado.

Para obter uma unique_key :

ini_get("session.upload_progress.prefix") . $_POST[ini_get("session.upload_progress.name")];

Se o acima não funcionar (não o testei), seu único recurso seria criar seu próprio manipulador personalizado para PHP, seja como um módulo Apache (ou melhor, como um aplicativo CGI personalizado). Lá você poderia fazer sua filtragem.

@ burhan-khalid forneceu uma resposta mais atualizada e correta acima.

Resposta curta não é com suas restrições.

Você não pode acessar esse arquivo com PHP até que ele tenha sido carregado no servidor. Depois de carregado, você pode lê-lo, mas não antes, pelo menos não sem algum tipo de software do lado do cliente que permita que você o transmita para o PHP em vez da apresentação normal do formulário.