Pergunta

Eu estou tentando escrever alguns PHP para fazer o upload de um arquivo para uma pasta no meu servidor web.Aqui está o que eu tenho:

<?php
    if ( !empty($_FILES['file']['tmp_name']) ) {
        move_uploaded_file($_FILES['file']['tmp_name'], './' . $_FILES['file']['name']);
        header('Location: http://www.mywebsite.com/dump/');
        exit;
    }
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
    <head>
        <title>Dump Upload</title>
    </head>
    <body>
        <h1>Upload a File</h1>
        <form action="upload.php" enctype="multipart/form-data" method="post">
            <input type="hidden" name="MAX_FILE_SIZE" value="1000000000" />
            Select the File:<br /><input type="file" name="file" /><br />
            <input type="submit" value="Upload" />
        </form>
    </body>
</html>

Estou recebendo esses erros:

Aviso:move_uploaded_file(./test.txt) [função.mover-carregado-file]:failed to open stream:Permissão negada no E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php na linha 3

Aviso:move_uploaded_file() [função.mover-carregado-file]:Não é possível mover 'C:\WINDOWS emp\phpA30E.tmp' para './test.txt' em E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php na linha 3

Aviso:Não é possível modificar informações de cabeçalho - headers já enviados pelo (a saída começou em E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php:3) em E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php na linha 4

Versão do PHP 4.4.7 Executando o IIS em uma caixa do Windows.Esse arquivo/pasta tem permissões 777.

Qualquer idéias?

Foi útil?

Solução

Como é o Windows, que não é 777.Se você estiver usando chmod, verifique o Windows relacionados com comentários.

Verifique se a Conta do IIS pode acessar (ler, escrever, modificar) estas duas pastas:

E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\
C:\WINDOWS\Temp\

Outras dicas

OMG

move_uploaded_file($_FILES['file']['tmp_name'], './' . $_FILES['file']['name']);

Não faça isso. $_FILES['file']['name'] poderia ser ../../../../boot.ini ou qualquer número de coisas ruins.Você nunca deve confiar este nome.Você deve renomear o arquivo em outra coisa e associar o nome original, com o seu nome aleatório.No mínimo, use basename($_FILES['file']['name']).

Tente adicionar um caminho.O código a seguir funciona para mim:

<?php

if ( !empty($_FILES['file']) ) {
    $from = $_FILES['file']['tmp_name'];
    $to = dirname(__FILE__).'/'.$_FILES['file']['name'];

    if( move_uploaded_file($from, $to) ){
        echo 'Success';   
    } else {
        echo 'Failure';   
    }

    header('Location: http://www.mywebsite.com/dump/');
    exit;
}
?>

Aviso:move_uploaded_file() [função.mover-carregado-file]:Não é possível mover 'C:\WINDOWS emp\phpA30E.tmp' para './people.xml' em E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php na linha 3

é a mais importante linha ele diz que você não pode colocar o arquivo onde desejar e isto normalmente significa que existe um problema de permissões

verificar o processo de execução da aplicação (normalmente os servidores de processo para php) tem os direitos para gravar um arquivo de lá.

EDITAR:

espere um pouco Eu pulei na arma um pouco é o caminho para o arquivo, em primeira linha, correto?

Outro acha que observar é o separador de diretório, você está usando / em uma caixa de Windows..

Adicionar o usuário do IIS no 'despejo' pastas de segurança persmissions grupo, e dar acesso de leitura/gravação.

Crie uma pasta chamada "imagens" com permissão de pasta 777

<?php
    move_uploaded_file($_FILES['file']['tmp_name'],"image/".$_FILES['file']['name']);
?>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top