Quero descompactar um arquivo e isso funciona bem
system('unzip File.zip');
Mas preciso passar o nome do arquivo pela URL e não consigo fazê-lo funcionar, é isso que tenho.
$master = $_GET["master"];
system('unzip $master.zip');
o que estou perdendo? Eu sei que tem que ser algo pequeno e estúpido que estou ignorando.
Obrigado,
system("unzip $master.zip");
deve funcionar.Respostas:
Só posso supor que seu código veio de um tutorial em algum lugar online? Nesse caso, bom trabalho tentando descobrir por si mesmo. Por outro lado, o fato de esse código poder ser publicado on-line em algum lugar, pois a maneira correta de descompactar um arquivo é um pouco assustador.
O PHP possui extensões integradas para lidar com arquivos compactados. Não deve haver necessidade de usar
system
chamadas para isso.ZipArchive
docs é uma opção.Além disso, como outros comentaram,
$HTTP_GET_VARS
foi preterido desde a versão 4.1 ... que foi há muito tempo. Não use. Use o$_GET
superglobal em seu lugar.Por fim, tenha muito cuidado ao aceitar qualquer entrada que seja passada para um script por meio de uma
$_GET
variável.SANITIZE SEMPRE A ENTRADA DO USUÁRIO.
ATUALIZAR
Conforme seu comentário, a melhor maneira de extrair o arquivo zip para o mesmo diretório em que reside é determinar o caminho difícil para o arquivo e extraí-lo especificamente para esse local. Então, você poderia fazer:
fonte
$zip->extractTo('./');
executar, no entanto, isso provavelmente não é o caso. Uma opção melhor é determinar a localização do arquivo zip no sistema de arquivos e extraí-lo lá. Vou atualizar minha resposta para demonstrar.Fatal error: Class 'ZipArchive' not found
erro que eu tento este script :-( Existe alguma opção nesse ponto?zlib
biblioteca subjacente para executar praticamente todas as operações de compactação / descompactação com PHP. Mesmo para fazer chamadas do sistema, você precisa ter a biblioteca subjacente. Isso é algo muito onipresente, e não tê-lo é a exceção. Se você estiver em hospedagem compartilhada, eles devem instalá-lo para você. Caso contrário, apenas google algo como "How to install zip funções de suporte para o PHP"Por favor, não faça assim (passar GET var para fazer parte de uma chamada de sistema). Use o ZipArchive .
Portanto, seu código deve se parecer com:
E para responder sua pergunta, seu erro é 'algo $ var outra coisa' deve ser "algo $ var outra coisa" (entre aspas duplas).
fonte
Usando
getcwd()
para extrair no mesmo diretóriofonte
Simplesmente tente este yourDestinationDir é o destino para extrair ou remover -d yourDestinationDir para extrair para o diretório raiz.
fonte
yourDestinationDir
comosession_save_path() . DIRECTORY_SEPARATOR . "$name" . DIRECTORY_SEPARATOR
onde$name
está a pasta de destino para descompactar na pasta da sessão.Atualizei a resposta de @rdlowrey para um código melhor e mais limpo. Isso descompactará um arquivo no diretório atual usando
__DIR__
.fonte
O PHP tem sua própria classe embutida que pode ser usada para descompactar ou extrair o conteúdo de um arquivo zip. A classe é ZipArchive. Abaixo está o código PHP simples e básico que extrairá um arquivo zip e o colocará em um diretório específico:
Se você deseja alguns recursos avançados, abaixo está o código aprimorado que verificará se o arquivo zip existe ou não:
Fonte: Como descompactar ou extrair arquivos zip no PHP?
fonte
Atualizei a resposta de Morteza Ziaeemehr para um código mais limpo e melhor. Isso descompactará um arquivo fornecido no formulário para o diretório atual usando o DIR .
fonte
Apenas mude
Para este
ou este
system("unzip {$master}.zip");
fonte
você pode usar a função pré-embalada
Como usá-lo.
fonte
Use o código PHP abaixo, com o nome do arquivo no parâmetro "nome" da URL
fonte
Função PHP simples para descompactar. Verifique se você possui a extensão zip instalada no seu servidor.
fonte
Apenas use isto:
no seu código
$master
é passado como uma string, o sistema procurará um arquivo chamado$master.zip
fonte
'unzip' $master
não funcionaria, a menos que você tenha adicionado um espaço após descompactar e um período após a aspas simples. Teria sido muito mais fácil sugerirsystem("unzip $master.zip")
com aspas duplas ou pelo menos uma resposta válida.$_GET
string de consulta e injetar seu próprio código para asystem
chamada