当前位置:首页 » 文件管理 » php文件上传后缀名

php文件上传后缀名

发布时间: 2025-07-23 07:44:57

1. php获取上传文件扩展名$filename= md5(time().rand(0,9).$_FILES["filedata"]["name"]).".bmp";

$filename=md5(time().rand(0,9).$_FILES["filedata"]["name"]).'.'.pathinfo($_FILES["filedata"]["name"],PATHINFO_EXTENSION);

2. 如果页面提示不能上传php文件那么使用扩展名绕过方式上传文件的话下列哪种方+

如果网页限制了上传PHP文件,可以尝试使用以下方式绕过该限制上传PHP文件:
1. 使用双扩展名 - shell.php.jpg
服务器可能只检查第一个扩展名,这个可以上传PHP文件并重命名为PHP执行。
2.使用空白符 - shell.php%20.jpg
一些服务器过滤规则可能会忽略空白符,导致绕过。
3.使用大写扩展名 - shell.PHP
有的服务器仅检查小写扩展名。
4.使用特殊编码 - shell.php%00.jpg
一些过滤器可能会忽略空字符00,从而可绕过。
5.使用条件注释 - shell.php#.jpg
空格和#可能被过滤跳过而造成绕过。
6.使用特殊的双扩展名 - shell.php.php5.jpg
一些过滤仅校验第一个点。
7.切分文件头和内容分开上传
但是这些方法都依赖服务器端的过滤规则不够完善,从安全角度来说,服务器端最好进行白名单验证,而不是仅仅黑名单限制,从根本上杜绝文件上传漏洞。
另外,作为用户我们也不应该尝试非法绕过上传限制或者上传不需要的webshell。

3. php文件上传RAR的mime类型

首先要建立一个文件夹和两个文件,具体如下:

File ——————文件夹,用于存放上传的文件。
choose.htm ——————htm文件,用于选择上传的文件。
upload.php ——————php文件,用于处理上传的文件。

第一步:建立 File 文件夹。

第二步:建立 choose.htm 文件,代码如下:
____________________________________________________________________________________________________________

<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FLIE_SIZE" value="1000000" />
上传此文件:
<input name="userfile" type="file" id="userfile" />
<input type="submit" name="Submit" value="上传" />
</form>
____________________________________________________________________________________________________________

第三步:建立 upload.php 文件,代码如下:
____________________________________________________________________________________________________________
<?php

//上传文件错误判定
if($_FILES['userfile']['error']>0)
{
echo '错误:';

switch($_FILES['userfile']['error'])
{
case 1: echo '文件尺寸超过允许的最大上传限度!'; break;
case 2: echo '文件尺寸超过允许的最大上传限度!'; break;
case 3: echo '只有部分文件被上传!'; break;
case 4: echo '没有任何文件被上传!'; break;
}
exit;
}

//上传文件格式判定
if($_FILES['userfile']['type'] !='text/plain')
{
echo '错误:非法文件格式!';
exit;
}

//设置文件保存路径
$upfile = './File/' . $_FILES['userfile']['name'];

if(is_uploaded_file($_FILES['userfile']['tmp_name']))
{
if(!move_uploaded_file($_FILES['userfile']['tmp_name'],$upfile))
{
echo '错误:没有将文件移动到指定目录!';
exit;
}
}
else
{
echo '错误:可能文件上传被攻击!文件名:';
echo $_FILES['userfile']['name'];
}

echo '文件上传成功!';

//格式化上传的文件
$fp = fopen($upfile,'r');
$contents = fread($fp,filesize($upfile));
fclose($fp);

$contents = strip_tags($contents);
$fp = fopen($upfile,'w');
fwrite($fp,$contents);
fclose($fp);

//显示上传文件内容
echo '上传文件的内容为:';
echo $contents;
?>
____________________________________________________________________________________________________________

测试一下:

1、建立一个 123.txt 文件,里面输入一些纯文本字符,比如 abc,上传成功!

2、我们再来试看其他后缀名,如.exe,.php,.htm之类的,只要非txt,就将导致失败!

3、把任意一个大于1M的文件名改为123.txt并上传,我们将发现超过限制大小的文件将导致上传失败!

4、将123.txt的内容改掉,删除所有内容,输入 <html>HTML code</html>,保存并上传,我们会发现上传失败!

5、将123.txt的内容改掉,删除所有内容,输入 <?php echo'PHP code'; ?>保存并上传,我们会发现 File 文件夹中有一个0字节的,没有任何内容的123.txt文件!

4. php 图片上传move_uploaded_file 出错

上传文件不存在。很可能是PHP临时文件夹不存在导致的。

<?php
/*
* 文件上传类
*/
class Uploads{

//上传文件
private $uploadFile;

//上传文件扩展名
private $ext = array('jpeg','jpg','gif','png');

//上传文件大小
private $size = 5000000;

//上传文件目录
private $uploadDir = './uploads/';

//是否自定义名称,默认FALSE
private $newName = '';

//上传文件是否可读,默认为TRUE
private $isRead = TRUE;

//上传文件是否可写,默认为TRUE
private $isWrite = TRUE;

//上传信息
private $info;

/*
* 文件上传类初始化
*/
public function __construct($newName='',$ext='',$size='',$dir='',$isRead=TRUE,$isWrite=TRUE){
$this->ext = empty($ext)?$this->ext:$ext;
$this->size = empty($size)?$this->size:$size;
$this->dir = empty($dir)?$this->uploadDir:$dir;
$this->newName = $newName;
$this->isRead = $isRead?TRUE:FALSE;
$this->isWrite = $isWrite?TRUE:FALSE;
}
/*
* 处理上传文件
*/
public function doUpload(){
$this->checkData();
$this->checkFile() or $this->error();
$this->checkExt() or $this->error();
$this->checkSize() or $this->error();
$this->checkError() or $this->error();
$this->checkDir() or $this->error();
$this->upload() or $this->error();
return $this->info['msg'];
}
/*
* 处理上传文件数据
*/
public function checkData(){
$num = 0;
$newArr = array();
foreach($_FILES as $v){
if(is_array($v['name'])){
$count = count($v['name']);
for($i=0; $i<$count; $i++){
foreach($v as $m=>$n){
$newArr[$num][$m] = $n[$i];
}
$num++;
}
}else{
$newArr[$num] = $v;
$num++;
}

}
$endArr = array();
foreach($newArr as $v){
if($v['name'] != ''){
$endArr[]=$v;
}
}
$this->uploadFile = $endArr;
}
/*
* 检测上传文件是否存在
*/
private function checkFile(){
if(empty($this->uploadFile)){
$this->info['error'] = '上传文件不得为空!!!';
return FALSE;
}
return TRUE;
}
/*
* 检测上传文件类型是否合法
*/

private function checkExt(){
if(!is_array($this->ext)){
$this->ext = explode(',', $this->ext);
}
foreach($this->uploadFile as $v){
$ext = strtolower(substr(strrchr(basename($v['name']),'.'),1));
if(!in_array($ext,$this->ext)){
$this->info['error'] = '上传文件类型非法,禁止上传!!!';
return FALSE;
}
}
return TRUE;
}

/*
* 检测上传文件大小
*/

private function checkSize(){
foreach($this->uploadFile as $v){
if($v['size']>$this->size){
$this->info['error'] = '上传文件体积过大,上传失败!!!';
return FALSE;
}
}
return TRUE;
}

/*
* 检测文件上传错误代码
*/
private function checkError(){
foreach($this->uploadFile as $v){
switch($v['error']){
case 0:
return TRUE;
break;
case 1:
$this->info['error'] = '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值,上传失败!!!';
return FALSE;
break;
case 2:
$this->info['error'] = '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值,上传失败!!!';
return FALSE;
break;
case 3:
$this->info['error'] = '文件只有部分被上传!!!';
return FALSE;
break;
case 4:
$this->info['error'] = '没有文件上传!!!';
return FALSE;
break;
}
}
return TRUE;
}

/*
* 检测上传文件夹是否存在
*/

private function checkDir(){
if(!file_exists($this->uploadDir)){
mkdir($this->uploadDir,0777,true);
}
if(!is_writeable($this->uploadDir)){
$this->info['error'] = '上传目录没有写入权限,上传失败!!!';
return FALSE;
}
return TRUE;
}

/*
* 上传文件
*/

private function upload(){

date_default_timezone_set('PRC');

//检测文件是否自定义名称
$name = empty($this->newName)?date('Ymd_His'):$this->newName;
foreach($this->uploadFile as $k=>$v){
$upload_path = $this->uploadDir.$name.'_'.($k+1).strrchr(basename($v['name']),'.');
$upload_path = iconv('UTF-8','gbk',$upload_path);
if(is_uploaded_file($v['tmp_name'])){
if(move_uploaded_file($v['tmp_name'], $upload_path)){
if($this->isRead && $this->isWrite){
chmod($upload_path,0777);
}else if($this->isRead && !$this->isWrite){
chmod($upload_path,0444);
}else if(!$this->isRead && $this->isWrite){
chmod($upload_path,0222);
}else{
chmod($upload_path,0000);
}
$this->info['msg']=array('type'=>1,'success'=>'文件上传成功','path'=>iconv('gbk','UTF-8',$upload_path));
}else{
$this->info['error'] = '文件上传失败!!!';
return FALSE;
}
}
}
return TRUE;

}
/*
* 上传成功的方法
*/
public function success(){
echo $this->info['msg']['success'];
}

/*
* 上传文件错误方法
*/
public function error(){
echo $this->info['error'];
die;
}

这是我写的PHP类,你可以参考一下。有什么特殊需要的,你可以告诉我一下,完善一下上传类。

5. php上传图片没有文件名后缀

$filename = basename($_FILES['image']['name']);
$file_ext = strtolower(substr($filename, strrpos($filename, '.') + 1));
echo $file_ext;

请楼主先试试用这几句看是否能获取到后缀名
一般来说,即使系统没有显示后缀名,在php上传中也是可以获取到后缀名的
还有,就是要检查一下,move_uploaded_file函数里,目标地址的图片名称是否拼接了后缀名

6. php 验证上传的文件类型为图片,并获得文件的后缀名

以下是我上传了一个图片后显示的 $_FILES['filename']的信息
[filename] => Array
(
[name] => Winter.jpg
[type] => image/jpeg
[tmp_name] => /tmp/php2jw7QX
[error] => 0
[size] => 105542
)
其中type是文件类型的minitype 表示方法,例如普通的HTML的类型是text/html
如果你想用扩展名的方式判断的话可以用以下代码:
<?php
#允许的文件扩展名
$allowed_types = array('jpg', 'gif', 'png');
$filename = $_FILES['filename']['name'];
#正则表达式匹配出上传文件的扩展名
preg_match('|\.(\w+)$|', $filename, $ext);
#print_r($ext);
#转化成小写
$ext = strtolower($ext[1]);
#判断是否在被允许的扩展名里
if(!in_array($ext, $allowed_types)){
die('不被允许的文件类型');
}
?>

7. thinkphp3.2.3文件上传怎么配置cofig

$config = array(
'mimes' => array(), //允许上传的文件MiMe类型
'maxSize' => 0, //上传的文件大小限制 (0-不做限制)
'exts' => array(), //允许上传的文件后缀
'autoSub' => true, //自动子目录保存文件
'subName' => array('date', 'Y-m-d'), //子目录创建方式,[0]-函数名,[1]-参数,多个参数使用数组
'rootPath' => './Uploads/', //保存根路径
'savePath' => '', //保存路径
'saveName' => array('uniqid', ''), //上传文件命名规则,[0]-函数名,[1]-参数,多个参数使用数组
'saveExt' => '', //文件保存后缀,空则使用原后缀
'replace' => false, //存在同名是否覆盖
'hash' => true, //是否生成hash编码
'callback' => false, //检测文件是否存在回调,如果存在返回文件信息数组
'driver' => '', // 文件上传驱动
'driverConfig' => array(), // 上传驱动配置
);
$upload = new \Think\ Upload($config);

热点内容
夜神安卓模拟器怎么换码 发布:2025-07-23 15:25:53 浏览:137
日常用品存储租仓流程 发布:2025-07-23 15:24:50 浏览:404
双轨数据库 发布:2025-07-23 15:12:25 浏览:796
遥清水迷房间设置的密码是多少 发布:2025-07-23 14:58:29 浏览:647
手机安卓系统的耗电为什么那么大 发布:2025-07-23 14:58:21 浏览:613
sql语句不包含 发布:2025-07-23 14:58:17 浏览:617
ftp突然不显示了 发布:2025-07-23 14:46:20 浏览:547
小米锁屏缓存视频怎么就停止了 发布:2025-07-23 14:30:22 浏览:422
解压与内存 发布:2025-07-23 14:01:55 浏览:910
教你如何提高电脑配置 发布:2025-07-23 14:01:52 浏览:190