سؤال

أحاول كتابة بعض 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 emp\phpA30E.tmp' إلى './test.txt' في E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php على السطر 3

تحذير:لا يمكن تعديل معلومات الرأس - الرؤوس التي تم إرسالها بالفعل بواسطة (بدأ الإخراج في E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php:3) في E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\ upload.php على السطر 4

الإصدار PHP 4.4.7 تشغيل IIS على مربع Windows.يحتوي هذا الملف/المجلد المعين على 777 إذنًا.

أيه أفكار؟

هل كانت مفيدة؟

المحلول

بما أنه نظام Windows، لا يوجد 777 حقيقي.إذا كنت تستخدم chmod, ، تحقق من التعليقات المتعلقة بنظام Windows.

تأكد من أن حساب IIS يمكنه الوصول (القراءة والكتابة والتعديل) إلى هذين المجلدين:

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

نصائح أخرى

يا إلهي

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

لا تفعل ذلك. $_FILES['file']['name'] ممكن ان يكون ../../../../boot.ini أو أي عدد من الأشياء السيئة.يجب ألا تثق بهذا الاسم أبدًا.يجب عليك إعادة تسمية الملف باسم آخر وربط الاسم الأصلي باسمك العشوائي.في الحد الأدنى من الاستخدام basename($_FILES['file']['name']).

حاول إضافة مسار.الكود التالي يعمل معي:

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

تحذير:move_uploaded_file() [function.move-uploaded-file]:غير قادر على نقل 'C:\WINDOWS emp\phpA30E.tmp' إلى './people.xml' في E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php على السطر 3

هو السطر المهم الذي يشير إلى أنه لا يمكنك وضع الملف في المكان الذي تريده وهذا يعني عادةً وجود مشكلة في الأذونات

تحقق من أن عملية تشغيل التطبيق (عادةً عملية خوادم الويب الخاصة بـ php) لديها حقوق كتابة ملف هناك.

يحرر:

انتظر قليلا لقد قفزت البندقية قليلا هل الطريق إلى الملف في السطر الأول صحيح؟

هناك فكرة أخرى يجب ملاحظتها وهي فاصل الدليل الخاص بك، الذي تستخدمه / في مربع Windows..

أضف مستخدم IIS في مجموعة أذونات أمان المجلدات "تفريغ"، وامنحه حق الوصول للقراءة/الكتابة.

قم بإنشاء مجلد باسم "صورة" بإذن المجلد 777

<?php
    move_uploaded_file($_FILES['file']['tmp_name'],"image/".$_FILES['file']['name']);
?>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top