18

Web サーバーのフォルダーにファイルをアップロードするための PHP を作成しようとしています。ここに私が持っているものがあります:

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

次のエラーが表示されます。

警告: move_uploaded_file(./test.txt) [function.move-uploaded-file]: ストリームを開くことができませんでした: E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php 行 3 で許可が拒否されました

警告: move_uploaded_file() [function.move-uploaded-file]: 'C:\WINDOWS\Temp\phpA30E.tmp' を E:\inetpub\vhosts\mywebsite.com\ の './test.txt' に移動できません3 行目の httpdocs\dump\upload.php

警告: ヘッダー情報を変更できません - E:\inetpub\vhosts\mywebsite.com\httpdocs\ の (E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php:3 で出力が開始された) によって既に送信されたヘッダー4 行目の dump\upload.php

PHP バージョン 4.4.7 Windows ボックスで IIS を実行しています。この特定のファイル/フォルダーには 777 のアクセス許可があります。

何か案は?

4

8 に答える 8

17

ああ、神様

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

そうしないでください。またはいくつかの悪いことである$_FILES['file']['name']可能性があります。../../../../boot.iniこの名前は絶対に信用してはいけません。ファイルの名前を別の名前に変更し、元の名前をランダムな名前に関連付ける必要があります。最低限の使用basename($_FILES['file']['name'])で。

于 2008-12-13T17:17:01.657 に答える
9

Windows なので、実際の 777 はありません。chmodを使用している場合は、Windows 関連のコメントを確認してください。

IIS アカウントが次の 2 つのフォルダーにアクセス (読み取り、書き込み、変更) できることを確認します。

E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\
C:\WINDOWS\Temp\
于 2008-08-06T16:16:01.667 に答える
3

パスを追加してみてください。次のコードは私にとってはうまくいきます:

<?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;
}
?>
于 2008-08-07T12:06:45.817 に答える
1

Another think to observe is your directory separator, you are using / in a Windows box..

于 2009-02-12T17:14:23.050 に答える
1

警告: move_uploaded_file() [function.move-uploaded-file]: 'C:\WINDOWS\Temp\phpA30E.tmp' を E:\inetpub\vhosts\mywebsite.com\ の './people.xml' に移動できません3 行目の httpdocs\dump\upload.php

は、必要な場所にファイルを配置できないという重要な行であり、これは通常、アクセス許可の問題を意味します

アプリを実行しているプロセス (通常、php の webservers プロセス) にファイルを書き込む権限があることを確認します。

編集:

少し待ってください。少し大騒ぎしました。最初の行のファイルへのパスは正しいですか?

于 2008-08-06T16:15:21.637 に答える
1

IIS ユーザーを「ダンプ」フォルダーのセキュリティ権限グループに追加し、読み取り/書き込みアクセスを付与します。

于 2009-12-03T04:12:43.020 に答える
0

フォルダ権限で「image」という名前のフォルダを作成します777

<?php
    move_uploaded_file($_FILES['file']['tmp_name'],"image/".$_FILES['file']['name']);
?>
于 2012-11-16T12:51:29.290 に答える