PHP文件上传判断file是否己选择上传文件

 更新时间:2016年11月25日 14:58  点击:1453
一个合格的程序员在实现数据入库中时我们都会有一些非常严密的过滤与数据规则了,像我们文件上传时在前段要判断用户是否选择上传文件同时在后台也可判断是否有上传的文件了,下面我们就一起来看看相关例子吧。

如下html代码如

 代码如下 复制代码

<formaction="?"method="post"enctype='multipart/form-data'>
文件上传:<inputtype="file"name="file"id="file"/>
<inputtype="submit"id="send"value="提交"/>
</form>


我们最常用的在前端简单的进行判断

 代码如下 复制代码

<script>
varsend=document.getElementById("send");
send.onclick=function(){
varfile=document.getElementById("file").value;
if(file.length<1){
alert('请选择图片');
returnfalse;
}
}
</script>

如果要做真正的安全我们需要在后台进入判断处理

 代码如下 复制代码

<?php
//判断pic文件框是否已经选择文件
if(!empty($_FILES['file']['tmp_name'])){
echo'已选择文件';
}else{
echo'请选择文件';
}
//PS:$_FILES后面的['tmp_name']一定不要忘写,它表示是一个临时的意思
?>

安例分析

js判断是比较笼统了我们只是使用了file=document.getElementById("file").value;来判断file有没有值或不为空了,这样只要输入一个数字就可以直接提交了,所以我们需要进入如上传文件的用户名限制

 代码如下 复制代码

functionCheckWorkFile()
{
varobj=document.getElementById('fuMain');
if(obj.value=='')
{
alert('请选择要上传的作业书文件');
returnfalse;
}
varstuff=obj.value.match(/^(.*)(\.)(.{1,8})$/)[3];
if(stuff!='doc')
{
alert('文件类型不正确,请选择.doc文件');
returnfalse;
}
returntrue;
}

对于php处理我们也只使用了if(!empty($_FILES['file']['tmp_name'])){来判断不为空了,其实这样也是不合理的

如我们可以如此处理

 代码如下 复制代码

function file_type($filename)
{
    $file = fopen($filename, "rb");
    $bin = fread($file, 2); //只读2字节
    fclose($file);
    $strInfo = @unpack("C2chars", $bin);
    $typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
    $fileType = '';
    switch ($typeCode)
    {
        case 7790:
            $fileType = 'exe';
            break;
        case 7784:
            $fileType = 'midi';
            break;
        case 8297:
            $fileType = 'rar';
            break;       
  case 8075:
            $fileType = 'zip';
            break;
        case 255216:
            $fileType = 'jpg';
            break;
        case 7173:
            $fileType = 'gif';
            break;
        case 6677:
            $fileType = 'bmp';
            break;
        case 13780:
            $fileType = 'png';
            break;
        default:
            $fileType = 'unknown: '.$typeCode;
    }

 //Fix
 if ($strInfo['chars1']=='-1' AND $strInfo['chars2']=='-40' ) return 'jpg';
 if ($strInfo['chars1']=='-119' AND $strInfo['chars2']=='80' ) return 'png';

    return $fileType;
}

echo file_type('start.php');   // 6063 or 6033

这样我们可以限制上传文件类型的同时也给程序做了一个安全处理了哦

const是用于类成员常量的定义了,定义之后不可改,而define我们定义的是全局常量了, 这样我们在其它地方访问但不能改变了,具体还有一些细节我们下面给各位列出来吧

注意:define不能定义在类中,而const必须定义在类中,并且const必须通过类名::变量名来进行访问


1、const用于类成员变量定义,一旦定义且不能改变其值。define定义全局常量,在任何地方都可以访问。
2、define不能在类中定义而const可以。
3、const不能在条件语句中定义常量

4、const采用一个普通的常量名称,define可以采用表达式作为名称。
5、const只能接受静态的标量,而define可以采用任何表达式。
6、const 总是大小写敏感,然而define()可以通过第三个参数来定义大小写不敏感的常量
7.使用const简单易读,它本身是一个语言结构,而define是一个方法,用const定义在编译时比define快很多。

define是定义常量的,如果在类中定义常量呢?当然不能用define,而用const,如下例:

 代码如下 复制代码

<?php
//在类外面通常这样定义常量
define("PHP","111cn.net");
class MyClass
{
    //常量的值将始终保持不变。在定义和使用常量的时候不需要使用$符号
    const constant = 'constant value';
 
    function showConstant() {
        echo  self::constant . "<br>";
    }
}
 
echo MyClass::constant . "<br>";
 
$classname = "MyClass";
echo $classname::constant . "<br>"; // PHP 5.3.0之后
 
$class = new MyClass();
$class->showConstant();
echo $class::constant."<br>"; // PHP 5.3.0之后
//print_r(get_defined_constants());  //可以用get_defined_constants()获取所有定义的常量
?>


一般是define在类外定义常量,const在类内定义常量,并且const必须通过类名::变量名来进行访问。但是php5.3以上支持类外通过const定义常量,看如下,这样是ok的:

 代码如下 复制代码


<?php
    //@blog<http://www.111cn.net>
    const a = "abcdef";
    echo a;
?>

关于常量的基础知识,这里不说了,除了以上,define和const的其它区别(摘自网络):

1.const不能再条件语句中定义常量,但是define是可以的,如下:

 

 代码如下 复制代码
<?php
    if(1){
        const a = 'java';
    }
    echo a;  //必错
?>

2.const采用一个普通的常量名称,define可以采用表达式作为名称

 代码如下 复制代码


<?php
const  FOO = 'PHP';
 
for ($i = 0; $i < 32; ++$i) {
    define('PHP_' . $i, 1 << $i);
}
?>

3.const只能接受静态的标量,而define可以采用任何表达式。

 

 代码如下 复制代码
<?php
const PHP = 1 << 5;    // 错误
define('PHP', 1 << 5); // 正确
?>

4.const本身就是一个语言结构。而define是一个函数。所以使用const速度要快的多。

两个共同步:两者都是不能进行重新赋值。

php中三元运算符又被叫做三目运算符了,其实我常把它叫作问号运行符其实都可以这样做,三元运算符可以实现简单的条件判断功能,下在我来给各位介绍一些三元运算符的例子。

三元运算符的功能与“if....else”流程语句一致,它在一行中书写,代码精练、执行效率高。在PHP程序中恰当地使用三元运算符能够让脚本更为简洁、高效。代码的语法如下:

(expr1)?(expr2):(expr3); //表达式1?表达式2:表达式3

解释:如果条件“expr1”成立,则执行语句“expr2”,否则执行“expr3”。

 代码如下 复制代码

<?PHP
$a=10; $b=20;
$c=$a>$b?($a-$b):($a+$b);
//说明:如果变量a大于变量b则执行问号后面的,否则就执行:冒号后面的
echo $c;
?>

表达式里可以是函数、数组等等。

事实上,三元运算符可以扩展使用,当设置的条件成立或不成立,执行语句都可以不止一句,试看以下格式:

 代码如下 复制代码

(expr1) ? (expr2).(expr3) : (expr4).(expr5);

我们非常明显地看到,多个执行语句可以使用用字符串运算符号(“.”)连接起来,各执行语句用小角括号包围起来以表明它是一个独立而完整的执行语句。这样扩展后它的功能更为逼近“if...else”流程语句。
同时三元运算符还可以嵌套使用。例如,a大于b成立时:如果a小于c,那么x=c-a否则x=a-c;否则a小于b成立时:如果b小于c,那么x=c-b否则x=b-c:

 代码如下 复制代码

$a>$b ? $x=($a<$c ? $c-$a : $a-$c) : $x=($b<$c ? $c-$b : $b-$c);

嵌套使用的三元运算符可读性不太好,日后对代码的维护极可能存在问题,所以像这种情况我们还是直接使用if else if 来实现吧。

通常我们对于数据遍历会使用到foreach来操作当然也有使用到while list each函数来实现了,但在方便面上来看foreach更简洁好用性能也非常的不错,下面本人整理了一款在开发应用中foreach前后使用例子,希望对大家会有所帮助。

简单的一个php数组函数,之前没这个需要一直都不知道有这么一个函数,擦汗...

php数组逆序输出代码

 代码如下 复制代码
foreach(array_reverse($array) AS $key=>$value){
echo $value.'
';
}

 
array_reverse
(PHP 4, PHP 5)
array_reverse — 返回一个单元顺序相反的数组

说明

array array_reverse ( array $array [, bool $preserve_keys ] )
array_reverse() 接受数组 array 作为输入并返回一个单元为相反顺序的新数组,如果 preserve_keys 为 TRUE 则保留原来的键名。

Example #1 array_reverse() 例子

 代码如下 复制代码

<?php
$input  = array("php", 4.0, array("green", "red"));
$result = array_reverse($input);
$result_keyed = array_reverse($input, TRUE);
?>

这将使 $result 和 $result_keyed 具有相同的单元,但是注意键名的区别。$result 和 $result_keyed 的打印输出显示分别为:
Array
(
    [0] => Array
        (
            [0] => green
            [1] => red
        )

    [1] => 4
    [2] => php
)
Array
(
    [2] => Array
        (
            [0] => green
            [1] => red
        )

    [1] => 4
    [0] => php
)

例子,在PHP模板引擎中

模板文件:

 代码如下 复制代码

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>{$web_tile}</title>
</head>
<body>
{$article_title}
<br/>
  -- by {$author}
<hr/>
<br/>
{$content}
<br/>
-- publish @ {$time}

<br/>
<br/>
foreach test:

{foreach ( from=url key=b item=c )}
 <a href="index.php?artcle_id={==b}">{==c}</a>
{/foreach}

<br/>

</body>
</html>

解析引擎:

 代码如下 复制代码
// var
  $pattern_var = "/{$left_tag}\\$([\w\d]+){$right_tag}/";
  $replace_var = '<?php echo \$this->var_tpl_arr["$1"];?>';
  
  if (preg_match($pattern_var, $content)) {
   $content = preg_replace($pattern_var, $replace_var, $content);
  }
  
  // foreach
  preg_match_all("/{$left_tag}foreach\s+([^{]+?){$right_tag}/is", $content, $match_foreach);
  if (isset($match_foreach[1]) && is_array($match_foreach)) {
   foreach($match_foreach[1] as $match_key => $match_value) {
    $split_foreachs = array_filter(preg_split('/\s+/is', $match_value));
    $new_foreach_tag = array();
    foreach($split_foreachs as $split_foreach) {
     $split = explode("=", $split_foreach);
     if (count($split == 2)) {
      if(in_array($split[0], array("from","item","key"))) {
//过滤标签 不存在过滤
       $new_foreach_tag[$split[0]] = $split[1];
      }
     }
    }
    
    $from = $key = $item = '';
    extract($new_foreach_tag);
    $key = ($key) ? '$'.$key.' =>' : '' ;
    $replace_foreach = '<?php foreach($this->var_tpl_arr["'.$from.'"] as '.$key.' $'.$item.') { ?>';
    $content = str_replace($match_foreach[0][$match_key], $replace_foreach, $content);
    
   }
  }
  
  $pattern_foreach = "/{$left_tag}\/foreach{$right_tag}/";
  $replace_foreach = "<?php } ?>";
  if (preg_match($pattern_foreach, $content)) {
   $content = preg_replace($pattern_foreach, $replace_foreach, $content);
  }
  
  // var in statement
  $pattern_var = "/{$left_tag}==([\w\d]+){$right_tag}/";
  $replace_var = '<?php echo \$$1;?>';
  
  if (preg_match($pattern_var, $content)) {
   $content = preg_replace($pattern_var, $replace_var, $content);
  }

解析后:

 代码如下 复制代码

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><?php echo $this->var_tpl_arr["web_tile"];?></title>
</head>
<body>
<?php echo $this->var_tpl_arr["article_title"];?>
<br/>
  -- by <?php echo $this->var_tpl_arr["author"];?>
<hr/>
<br/>
<?php echo $this->var_tpl_arr["content"];?>
<br/>
-- publish @ <?php echo $this->var_tpl_arr["time"];?>

<br/>
<br/>
foreach test:

<?php foreach($this->var_tpl_arr["url"] as $b => $c) { ?>
 <a href="index.php?artcle_id=<?php echo $b;?>"><?php echo $c;?></a>
<?php } ?>

<br/>

</body>
</html>

使用:

 代码如下 复制代码

<?php

require_once 'core/YATP.class.php';

$app = new YATP();
date_default_timezone_set("Asia/Shanghai");
$app->is_cache = false;

$article_title = "yet,it is a simple template engine";
$author = "sanwhiteyu@tencent.com";
$web_tile = "just test ";
$content = "It is easy to write a simple template engine for yourself,what u can do is try to do it!";
$time = date("Y-m-d H:i:s",time());

$url = array(
  "url1"=>"http://www.111cn.net",
  "url2"=>"http://www.111cn.net",
);

$app->assign("article_title",$article_title);
$app->assign("author",$author);
$app->assign("web_tile",$web_tile);
$app->assign("content",$content);
$app->assign("time",$time);
$app->assign("url",$url);
$app->display("index.html");


// end of script

php文件怎么打开呢?php全简Hypertext Preprocessor 中文名字为超文本预处理器了,它和c,c++,java,perl一样可以进行一些算法操作,同时php主要是用在web应用开发中,php入门门槛较低,易于学习,使用广泛,主要适用于Web开发领域。PHP的文件后缀名为php了。

php文件是什么文件?


php文件怎么打开呢?php全简Hypertext Preprocessor 中文名字为超文本预处理器了,它和c,c++,java,perl一样可以进行一些算法操作,同时php主要是用在web应用开发中,php入门门槛较低,易于学习,使用广泛,主要适用于Web开发领域。PHP的文件后缀名为php了。

php文件怎么打开?

php文件打开方法很简单我们可以直接使用记事本文本就可以打了,如果是WEB开发应用我们可以使用dw Notepad ++ Eclipse PDT Notepad2等等都可以打开了,这种打开只能查看源文件了无法执行。


php文件怎么运行

前面介绍了php是一款Web开发领域一门编程语言了,我们需要php环境的支持才可以运行哦。

php环境有那些

php可以在windows或linux中运行,在windows中支持环境有iis+php或apache+php环境
linux中我也可以使用apache+php或nginx+php环境

php环境怎么配置

iis+php环境配置方法

1>  解压到 c:/php 目录.

打开 c:/php 目录,找到 php.ini-dist文件.重命名为 php.ini .

2>  打开php.ini 文件.

找到 ;include_path = ".;c:/php/includes" 该行.
修改为 include_path = "c:/php/includes"
找到 extension_dir = "./"
修改为 extension_dir = "c:/php/ext"
找到 ;extension=php_mysql.dll
修改为 extension=php_mysql.dll
找到 ;session.save_path = "/tmp"
修改为 session.save_path = "c:/winnt/temp"
如果操作系统是win2003 则为 "c:/windows/temp"
本目录内提供php.ini可以直接使用.适用windows2000.

3>  拷贝 php.ini到 c:/winnt

  拷贝 libmysql.dll 到 c:/winnt/system32

4>  新建目录d:/forphp做为测试php网站目录.

在该目录下新建记事本文件,重命名为index.php内容为 <? phpinfo(); ?> 本目录内有index.php供使用.

5>  确保Iusr_mochinename用户对d:/forphp有完全控制权限.

对c:/php有读取运行权限.(如果d盘为fat32文件系统格式,就不用设置d:/forphp权限了)

6>  打开iis管理器.

新建web站点.指向到d:/forphp目录.站点主机头任意指定.(为方便浏览,使用本机ip)

7>  右键站点--属性--"主目录"选项.

点下面"配置".弹出"应用程序配置",点"添加".可执行文件,浏览选中 c:/php/php5isapi.dll  确定. 扩展名 写 .php

8>  重起IIS. 即可实现iis站点支持php脚本.

PHP与IIS共存的设置

第一步,解开PHP5.0压缩包,可以把它放在C:/PHP5下面。
 
第二步,把C:/PHP5下面的php.ini-dist文件复制到WINNT目录下,并改名成php.ini。你不需要修改任何参数就可以运行,当然根据不同情况你可以自行修改某些参数。
 
第三步,把C:/PHP5/php5ts.dll复制到C:/WINNT/system32目录下。
 
第四步,启动计算机管理。
 
第五步,在计算机管理窗口上展开“服务和应用程序”/“Internet信息服务”,在“默认Web站点”上点鼠标右键,选属性,这时系统弹出“默认Web站点属性”窗口:
 
第七步,在“默认Web站点属性”窗口上点取“ISAPI筛选器”标签,点击“添加”按钮,在弹出的“筛选器属性”窗口的“筛选器名称”中输入“PHP”,“可执行文件”中输“C:/PHP5/sapi/php5isapi.dll”,确定。
  
第八步,在“默认Web站点属性”窗口上点取“主目录”标签,点“配置”按钮,在弹出的“应用程序配置”窗口中点取“添加”按钮,在弹出的“添加/编辑应用程序扩展名映像”对话框中的“可执行文件”文本框中输入“C:/PHP5/sapi/php5isapi.dll”,“扩展名”文本框中输入“.php”(注意一定要有那个点),确定。
 
第九步,打开命令行窗口,输入“net stop iisadmin”命令,终止IIS服务。系统会问你是否要将相关的服务也停止,答是。等到全部关闭。
 
第十步,输入“net start w3svc”命令,重新启动IIS服务。


apache配置php环境

1.我们在电脑中安装apache环境,
2.然后我们下载php版本之后解压在C:盘php目录下

然后我们在apache紧后面加上

LoadModule php5_module "c:/php5/php5apache2_2.dll"
AddType application/x-httpd-php .php
PHPIniDir "c:/php5"

再重启 apache这样就配置好了

然后我们再创建一个网站把php 文件放到网站目录下就可以运行了,代码如下

<?
define("test","HELLO WORLD!");
echo test
?>

输出为

HELLO WORLD

友情提示,本文章只是大概的介绍了php是什么文件的同时附加了php文件打开与让php运行的一些思路了,具体如果要真正的运行php我们还需要更细的去配置apache环境才可以哦,因为真正应用还有mysql数据库的安装配置哦。

[!--infotagslink--]

相关文章

  • php读取zip文件(删除文件,提取文件,增加文件)实例

    下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
  • Jupyter Notebook读取csv文件出现的问题及解决

    这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06
  • Photoshop打开PSD文件空白怎么解决

    有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
  • 解决python 使用openpyxl读写大文件的坑

    这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
  • C#实现HTTP下载文件的方法

    这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • SpringBoot实现excel文件生成和下载

    这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • php无刷新利用iframe实现页面无刷新上传文件(1/2)

    利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25
  • Php文件上传类class.upload.php用法示例

    本文章来人大家介绍一个php文件上传类的使用方法,期望此实例对各位php入门者会有不小帮助哦。 简介 Class.upload.php是用于管理上传文件的php文件上传类, 它可以帮...2016-11-25
  • php批量替换内容或指定目录下所有文件内容

    要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
  • PHP文件上传一些小收获

    又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
  • jQuery实现简单的文件上传进度条效果

    本文实例讲述了jQuery实现文件上传进度条效果的代码。分享给大家供大家参考。具体如下: 运行效果截图如下:具体代码如下:<!DOCTYPE html><html><head><meta charset="utf-8"><title>upload</title><link rel="stylesheet...2015-11-24
  • AI源文件转photoshop图像变模糊问题解决教程

    今天小编在这里就来给photoshop的这一款软件的使用者们来说下AI源文件转photoshop图像变模糊问题的解决教程,各位想知道具体解决方法的使用者们,那么下面就快来跟着小编...2016-09-14
  • C++万能库头文件在vs中的安装步骤(图文)

    这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
  • Zend studio文件注释模板设置方法

    步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
  • php文件上传你必须知道的几点

    本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21
  • C#使用StreamWriter写入文件的方法

    这篇文章主要介绍了C#使用StreamWriter写入文件的方法,涉及C#中StreamWriter类操作文件的相关技巧,需要的朋友可以参考下...2020-06-25
  • ant design中upload组件上传大文件,显示进度条进度的实例

    这篇文章主要介绍了ant design中upload组件上传大文件,显示进度条进度的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-29
  • php实现文件下载实例分享

    举一个案例:复制代码 代码如下:<?phpclass Downfile { function downserver($file_name){$file_path = "./img/".$file_name;//转码,文件名转为gb2312解决中文乱码$file_name = iconv("utf-8","gb2312",$file_name...2014-06-07
  • C#路径,文件,目录及IO常见操作汇总

    这篇文章主要介绍了C#路径,文件,目录及IO常见操作,较为详细的分析并汇总了C#关于路径,文件,目录及IO常见操作,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25