zoukankan      html  css  js  c++  java
  • IIS环境下上传文件失败

    跟随学习代码练习 php 上传文件,一开始是点击按钮后没有反应,不知道是否成功,使用 var_dump($_FILES) 查看,发现空空如也。遂百度一下,发现基本代码应如下

    <form action="../testphp/PostPhoto.php" method="post" enctype="multipart/form-data">
        <p><H2>上传文件:</H2></p>
        <input type="file" name="user_photo">
        <input type="submit" value="上传">
    </form>

    action 是要调用的 php 页面,method 自然是 post,enctype 是关键据说要写成“multipart/form-data”才可,暂时不明就里,待来日研究。代码写完,html中点击按钮即可上传,那么接收数据的 php 文件代码如何呢

    var_dump($_FILES);
    
    if (isset($_FILES["user_photo"]))
    {       
         $uploaddir="../user/file/";               
         $UploadSuccess = move_uploaded_file($_FILES['user_photo']['tmp_name'],$uploaddir.$_FILES['user_photo']['name']);
         If ($UploadSuccess)
         {
             echo "文件上传成功,详细信息为:<br>";
             print("上传文件: ".$_FILES['user_photo']['name']." <br>");
             print("本地文件: ".$_FILES['user_photo']['tmp_name']." <br>");
             print("大小: ".$_FILES['user_photo']['size']." <br>");
             print("类型: ".$_FILES['user_photo']['type']." <br>");
             print("<hr><br>");
           }
      }

    第一句,是为了查看全局变量 $_FILES 到底有没有“东西”,如果Web服务工作正常,php解析正常,那就应该有值,显示成如下模样

    array(1) { ["user_photo"]=> array(5) { ["name"]=> string(8) "timg.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(40) "C:inetpubwwwrootuserfilephp4090.tmp" ["error"]=> int(0) ["size"]=> int(91345) } }

    可是一开始不是这样的,通过页面提示,发现无法保存/写入文件,似乎与权限有关...IIS...权限...嗯,let's baidu

    web 服务器需要独立的权限,因此不能保存,就是不能写入本地(服务器的本地),不能写入本地就是没有写权限,因此要对本地文件夹赋予权限。wwwroot下新建立一个 ./user/file 文件夹,右键点击属性,选择安全,对 IIS_IUSRS 用户赋予写权限(操作前只有读),设置后应该是这样子

    好,let's 再试一下,又提示有关写入和权限的问题,冷静想想,经过分析提示信息,发现运行php页面的路径无法操作流...那意味着...php脚本要操作php页面所在的路径...且先不管为什么操作这个路径,说明还是权限的问题。干脆,对整个 wwwroot 设置了路径,如法炮制。再试一下,成功了!但是,/user/file 下根本没有文件...哪儿去了?

    经过一番代码分析和文件查找,在 postphoto.php 同路径下找到了文件...哦终于明白了。因为一开始的时候,php 代码中的 $uploaddir="../user/file/";  一句原本是这样的 $uploaddir="./"; ,因此文件上传到了该脚本同目录下,但当时还未赋予其写权限,因此写入当然失败。在对整个 wwwroot 赋予了权限之后,自然写成功了,也就上传成功了。理解了关系之后,把 $uploaddir 修改为 上一层的user下的file文件夹 后再运行,终于皆大欢喜!

    总结:

    1. 无论何种 web 服务,对权限的管理是很严格的,要认真仔细配置权限;

    2. 练习时无所谓,做项目时,要认真考虑整个项目的文件结构,避免临时调整,便于分配读写权限;

    3. php.ini 需要配合如

     upload_tmp_dir 指定了 php 上传文件的临时存放路径,可空,如空,将使用系统默认,windows 系统将会是 x:windows emp,并以系统临时文件名命名,如php8FD1.tmp

  • 相关阅读:
    spring data jpa 不更新 null 值,
    Android 生命周期
    Java相对路径/绝对路径总结
    android 系统广播
    ADB 设置远程调试
    adb server is out of date ADB server didn't ACK * failed to start daemon *一种解决方式
    Windows 8.1 Enterprise Preview
    反编译CMD命令
    判断运营商
    ADT安装
  • 原文地址:https://www.cnblogs.com/cinlap/p/7363777.html
Copyright © 2011-2022 走看看