php 文件上传的基本方法

基本思路:
1。HTML表单中 form中的enctype必为enctype="multipart/form-data",method = post 设置提交数据中的type = file
2。在处理页面中用$_FILES['upfile']( upfile 为type=file中的name名称);
3。用is_uploaded_file($_FILES['upflie']['tmp_name'])判断是不是用http post上传
4。用$_FILES['upfile']['error']判断是否没有出错

5。如果在上面的都正确,用move_uploaded_file($_FILES['upfile']['tmp_name'], $newfilename)转移到新的位置,如果成功返回true,否则为false



以下是提交表单 html表单
<form method="post" action="1.php" enctype="multipart/form-data">
<input type="file" name="upfile" value="上传" /><br />
<input type="submit" name="Submit" value="Submit" />
</form>
以下处理表单的文件 1.php


$_FILES['upfile'][name]  文件名称
$_FILES['upfile'][type]  文件类型
$_FILES['upfile'][size]  文件大小
$_FILES['upfile'][tmp_name] 文件临时目录,用于move_uploaded_file
$_FILES['upfile'][error]  文件错误提示:其返回值如下:
    0 ==> 没有发生错误,上传成功
    1 ==> 上传文件超过php.ini中的最大大小
    2 ==> 上传文件大小超过 html表单中的大小
    3 ==> 文件只有部分上传
    4 ==> 没有文件被上传
    6 ==> 找不到临时文件夹
    7 ==> 文件写入失败 php 5.1.0以上的版本用
    =========================================
判断是不是通过 http post 上传的函数,是返回true,不是返回false:
bool is_uploaded_file($filename) //$filename 为临时目录名称 $_FILES['upfile']['tmp_name'];
==========================
判断是否成功转移,成功返回true,失败返回false:
bool move_uploaded_file($filename, $newfilename); //$filename 为临时目录名称 $_FILES['upfile']['tmp_name']; $newfilename 新文件名称

<?php
/*
if(is_uploaded_file($_FILES['upfile']['tmp_name'])){
    if($_FILES['upfile']['error'] == 0){
        if(move_uploaded_file($_FILES['upfile']['tmp_name'], 'ok/100.jpg')){
            echo '成功上传';
        }else{
            echo '上传失败,不能转移文件到相应的文件';
        }
    }else if($_FILES['upfile']['error'] == 1){
        echo '上传文件超过php.ini中的最大大小';
    }else if($_FILES['upfile']['error'] == 2){
        echo '上传文件大小超过 html表单中的大小';
    }else if($_FILES['upfile']['error'] == 3){
        echo '文件只有部分上传';
    }else if($_FILES['upfile']['error'] == 4){
        echo '没有文件被上传';
    }else if($_FILES['upfile']['error'] == 6){
        echo '找不到临时文件夹';
    }else{
        echo '文件写入失败!';
    }
}
*/
?>

一般图片存放在独立的服务器,也方便上传到cdn,
方法可这样实现:as:
http://www.pic.com/pic.php

<?php
header('content-type:text/html;charset=utf8');
$ch = curl_init();
//加@符号curl就会把它当成是文件上传处理
$data = array('img'=>'@'. dirname(__FILE__).'/图片名称');
curl_setopt($ch,CURLOPT_URL,"图片服务器的url");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
$result = curl_exec($ch);
curl_close($ch);
print_r(json_decode($result));
?>

图片服务器的url:as :
http://static.pic.com/pic.php

<?php
if($_FILES){
 $filename = $_FILES['img']['name'];
 $tmpname = $_FILES['img']['tmp_name'];
 if(move_uploaded_file($tmpname,dirname(__FILE__).'/upload/'.$filename)){
  echo json_encode($filename);
 }else{
  $data = json_encode($_FILES);
  echo $data;
 }
}
?>

www.pic.com/pic.php中的图片文件名,可以先通过本地上传到服务器,
再从服务器上执行该文件即可移动文件到新的服务器

原文地址:https://www.cnblogs.com/lin3615/p/3543540.html