PHP Hata - Bir dosyayı yükleme

8 Cevap php

Ben benim webserver üzerinde bir klasöre dosya yüklemek için bazı php yazmaya çalışıyorum. İşte ne var:

<?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>

Ben bu hataları alıyorum:

Warning: move_uploaded_file(./test.txt) [function.move-uploaded-file]: failed to open stream: Permission denied in E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php on line 3

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\WINDOWS\Temp\phpA30E.tmp' to './test.txt' in E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php on line 3

Warning: Cannot modify header information - headers already sent by (output started at E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php:3) in E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php on line 4

PHP version 4.4.7 Running IIS on a Windows box. This particular file/folder has 777 permissions.

Herhangi bir fikir?

8 Cevap

Windows olduğu gibi, gerçek bir 777 var. Eğer chmod, Windows ile ilgili yorumları kontrol kullanıyorsanız.

IIS Hesap bu iki klasör (değiştirme, yazma, okuma) erişebilirsiniz kontrol edin:

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

OMG

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

Bunu yapmayın. $ _FILES ['File'] ['name'] olabilir .. /.. /.. /.. / Boot.ini veya kötü şeylerin herhangi bir sayı. Bu adı asla güvenme. Başka bir dosya bir şey yeniden adlandırın ve rastgele adı ile özgün adı ilişkilendirmek gerekir. Minimum kullanım İşlevi ($ _FILES ['file'] ['name']) at.

Bir yolunu eklemeyi deneyin. Aşağıdaki kod benim için çalışıyor:

<?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;
}
?>
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\WINDOWS\Temp\phpA30E.tmp' to './people.xml' in E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php on line 3

size istediğiniz dosyayı koyamazsınız ve bu normal bir izinleri sorun anlamına gelir diyor önemli satır

uygulama çalıştıran sürecini kontrol edin (normalde php için webserverların işlemi) orada bir dosyayı yazmak için haklara sahiptir.

EDIT:

hang on a bit I jumped the gun a little is the path to the file in the first line correct?

Evet yol doğrudur. Açıkçası sunucusu URL ve Test.txt dosyayı yeniden adlandırıldı.

Başka bir dizin ayırıcı, Windows kutuda / kullanarak gözlemleme düşünüyorum ..

'Döküm' klasörleri güvenlik persmissions grubunda IIS kullanıcıyı ekleyin ve bu okuma / yazma erişimi verir.

klasör izni "777" ile "görüntü" adında bir klasör oluşturun

<?php
move_uploaded_file($_FILES['file']['tmp_name'],"image/".$_FILES['file']['name']);
?>