Deprecated
: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in
/www/wwwroot/testblog.58heshihu.com/var/Widget/Archive.php
on line
1057
首页
关于
Search
1
给你10个市场数据调研报告的免费下载网站!以后竞品数据就从这里找!
182 阅读
2
php接口优化 使用curl_multi_init批量请求
144 阅读
3
《从菜鸟到大师之路 ElasticSearch 篇》
107 阅读
4
2024年备考系统架构设计师
104 阅读
5
PHP 文件I/O
92 阅读
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
登录
Search
标签搜索
php函数
php语法
性能优化
安全
错误和异常处理
问题
vue
Composer
Session
缓存
框架
Swoole
api
并发
异步
正则表达式
php-fpm
mysql 索引
开发规范
协程
dafenqi
累计撰写
786
篇文章
累计收到
28
条评论
首页
栏目
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
副业
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
页面
关于
搜索到
2
篇与
的结果
2023-08-09
PHP & HTML5 文件夹上传
PHP & HTML5 文件夹上传拖拽上传文件夹到一个web应用程序。所以上传多个文件是一个有趣的了不起的进步。但是现在我提供给你 webkitdirectory !注意:这只会在一个最新的webkit的浏览器上运行。webkitdirectory目前不是标准 ,纯粹是为了玩。我不建议你在正式环境部署这个应用程序。I had the pleasure of having a little play around with this when I should have probablybeen working with processing for university but I do like to procrastinate。(此略)所以,干脆痛快:html 代码会员.jpg很简单,对吗?确实啊!上PHP代码。PHP 代码if($_FILES['file_input']){$uploads = UpFilesTOObj($_FILES['file_input']); $fileUploader=new FileUploader($uploads);}class FileUploader{public function __construct($uploads,$uploadDir='uploads/'){ foreach($uploads as $current) { $this->uploadFile=$uploadDir.$current->name.".".get_file_extension($current->name); if($this->upload($current,$this->uploadFile)){ echo "Successfully uploaded ".$current->name."n"; } } } public function upload($current,$uploadFile){ if(move_uploaded_file($current->tmp_name,$uploadFile)){ return true; } }}function UpFilesTOObj($fileArr){foreach($fileArr['name'] as $keyee => $info) { $uploads[$keyee]->name=$fileArr['name'][$keyee]; $uploads[$keyee]->type=$fileArr['type'][$keyee]; $uploads[$keyee]->tmp_name=$fileArr['tmp_name'][$keyee]; $uploads[$keyee]->error=$fileArr['error'][$keyee]; } return $uploads;}function get_file_extension($file_name){ return substr(strrchr($file_name,'.'),1);}我也一直在准备做MooTools脚本异步上传文件。所以请继续关注。我很高兴听到任何意见或建议。好运。更新:上传时保持目录结构 :所以最近我一直在玩很多新的文件API和一些图像处理等。在javascript中,我有巨大的乐趣这样做!我已经看到很多人问文件夹上传,这是一个令人兴奋的新发展。大多数人似乎有上传文件夹时保留文件结构的问题。在上传时是有可能保持文件夹的结构的。在写作时,我一直无法找到一个等价的不使用webkit的浏览器。这篇文章仅供测试!我正在写一个完整的AJAX文件夹上传脚本,但是我做时,我会去发一些我发现有趣的小代码片段。因此,闲话少说,上代码:未选择任何文件document.getElementById('files').onchange = function(e) { var files = e.target.files; // FileList for (var i = 0, f; f = files[i]; ++i)console.debug(files[i].webkitRelativePath);}检索路径是这么简单!这是一个工作示例:这是最基本的版本,将显示已提交的列表。fiddle是更复杂的比上面的代码让它不显示控制台什么的 。上传到服务器!事情开始变得稍微复杂,当我们上传这些到服务器时。我已经能够找到在撰写本文时,HTTP请求不支持上传时的变换文件路径。这可以很容易地通过我们自己添加它到请求数据解决。function uploadFiles(files){// Create a new HTTP requests, Form data item (data we will send to the server) and an empty string for the file paths. xhr = new XMLHttpRequest(); data = new FormData(); paths = ""; // Set how to handle the response text from the server xhr.onreadystatechange = function(ev){ console.debug(xhr.responseText); }; // Loop through the file list for (var i in files){ // Append the current file path to the paths variable (delimited by tripple hash signs - ###) paths += files[i].webkitRelativePath+"###"; // Append current file to our FormData with the index of i data.append(i, files[i]); }; // Append the paths variable to our FormData to be sent to the server // Currently, As far as I know, HTTP requests do not natively carry the path data // So we must add it to the request manually. data.append('paths', paths); // Open and send HHTP requests to upload.php xhr.open('POST', "upload.php", true); xhr.send(this.data);}This will simply create a triple hash delimited string which we will split into an array of file paths on the server which will correspond to our array of files。这将创建一个三重散列分隔的字符串,我们将分成数组服务器上的文件路径将对应于我们的一系列文件。0)$fileUploader = new FileUploader($_FILES); class FileUploader{public function __construct($uploads,$uploadDir='uploads/'){ // Split the string containing the list of file paths into an array $paths = explode("###",rtrim($_POST['paths'],"###")); // Loop through files sent foreach($uploads as $key => $current) { // Stores full destination path of file on server $this->uploadFile=$uploadDir.rtrim($paths[$key],"/."); // Stores containing folder path to check if dir later $this->folder = substr($this->uploadFile,0,strrpos($this->uploadFile,"/")); // Check whether the current entity is an actual file or a folder (With a . for a name) if(strlen($current['name'])!=1) // Upload current file if($this->upload($current,$this->uploadFile)) echo "The file ".$paths[$key]." has been uploadedn"; else echo "Error"; } } private function upload($current,$uploadFile){ // Checks whether the current file's containing folder exists, if not, it will create it. if(!is_dir($this->folder)){ mkdir($this->folder,0700,true); } // Moves current file to upload destination if(move_uploaded_file($current['tmp_name'],$uploadFile)) return true; else return false; }}?>进展这绝不是完美的,这是我一直在玩,并分享我的发现。我将会更新这篇文章当我有更多要发的东西。或者如果有特别令人兴奋的东西,我甚至可能发一篇新文章。所以现在,到这里下载源码 Folder-Upload-Structure-Sapphiondotcom
2023年08月09日
12 阅读
0 评论
0 点赞
2023-08-07
PHP文件上传详解
PHP文件上传详解上传文件分为两个部分,HTML显示部分和PHP处理部分,HTML部分主要是让用户来选择所要上传的文件,然后通过PHP中的$_FILES,我们可以把文件上传到服务器的指定目录。先来看一下HTML部分。? 上传: 说明:form标答的action="upload.php"是指点击这个form中的submit的时候,这个上传命令会被发送到这个叫 upload.php的页面去处理。method="post"是指以post方式去送,enctype="multipart/form-data"属 性规定了在提交这个表单时要使用哪种内容类型,在表单需要二进制数据时,比如文件内容,请使用"multipart/form-data",如果要上传文 件,这个属性是必要的。input中的type="file"时,规定了应该把输入作为文件来处理,并且在input后面会有一个浏览的按钮。我们再来看一个PHP处理页面 upload.php?<?phpif($_FILES'myfile' !='') { if($_FILES'myfile' > 0) { echo "错误状态:" .$_FILES'myfile'; }else { move_uploaded_file($_FILES['myfile']['tmp_name'] ,"uploads/" .$FILES'myfile'); echo "alert(上传成功!);"; }}else{ echo "alert(请上传文件!);";}?>说明:在解释这篇代码前,我们有必要了解以下知识。$_FILES'myfile' 是指被上传文件的名称$_FILES'myfile' 是指被上传文件的类型$_FILES'myfile' 是指被上传文件的大小,单位为字节(B)$_FILES'myfile' 是指被上传文件存在服务器中的临时副本文件名称,文件被移动到指定目录后临文件将被自动消毁。$_FILES'myfile' 是指由文件上传中有可能出现的错误的状态码,关于各状态含义后在会说明。了解了这些,我们再来看一下upload.php的代码。首先,$_FILES['myfile']['name']中的myfile是指在上面HTML页面中上传文件标签的name值,根据这个我们才能知道我 们正在处理的文件是哪一个input提交过来的,然后再来判断一下 $_FILES'myfile' 不是否为空,根据这个我们可以知道用户有没有上传文件,从而执行不同的操作。如果上传了文件并且状态是0就说明上传成功,我们就可以用 move_uploaded_file方法把上传的文件存放到指定目录,上面这个例子是指把上传的文件移动到同目录下的uploads文件夹下,这个路径 是相对于这个PHP文件(既upload.php)的相对目录。比如,我们想把上传的文件移动到upload.php上一层叫user的文件夹中的话,我 们就可以这样写:move_uploaded_file($_FILES['myfile']['tmp_name'] , "../user/" . $FILES'myfile'),这种方法使用起来很方便、灵活,这样一个文件就被上传到服务器中了,可以打开服务器中的目录查看该 文件。允许用户上传文件是一个有巨大的安全风险的行为,因此,通常情况下,我们会对用户上传的文件做一些限制,比如常见的限制文件类型和文件大小,来看一下。?<?phpif($_FILES'myfile' !='') { if($_FILES'myfile' > 0) { echo "错误状态:" .$_FILES'myfile'; }else { if($_FILES['myfile']['type'] =='image/jpeg' or $_FILES'myfile' =='image/pjpeg' or $_FILES['myfile']['type'] =='image/gif' &&$_FILES'myfile' < 20480){ move_uploaded_file($_FILES['myfile']['tmp_name'] ,"uploads/" .$FILES'myfile'); echo "alert(上传成功!);"; }else { echo "alert(请上传小于2MB的jpeg或Gif类型的附件);"; } }}else { echo "alert(请上传文件!);";}?>从上面的代码可以看出,我们规定了上传的文件类型必须是jpeg或者Gif并且必须小于2MB的文件($_FILES'myfile'的默认单位是字节)这里必须提到的是,对于IE浏览器,它识别jpg文件的类型必须是 pjpeg,而对于 FireFox,则必须是 jpeg,因此,我们必须对jpeg和pjpeg都作判断。这样一来,我们可以限制用户上传的一些危险的比如木马或者病毒脚本,来保证了服务器的安全运行。现在,一个上传文件程序就基本成形了。但时在有些时候,考虑到用户体验,我们还可以对用户上传过程中发生的错误作出一些提醒,让用户明白是哪里出了问题,我们会对$_FILES['myfile']['error']作出一些说明,先来看一下在PHP中对$_FILES'myfile'常见6种状态的定义。?$_FILES'teacher_pic' = 1 文件大小超过了PHP.ini中的文件限制$_FILES'teacher_pic' = 2 文件大小超过了浏览器限制$_FILES'teacher_pic' = 3 文件部分被上传$_FILES'teacher_pic' = 4 没有找到要上传的文件$_FILES'teacher_pic' = 5 服务器临时文件夹丢失$_FILES'teacher_pic' = 5 文件写入到临时文件夹出错错误信息状态为1时说明上传的文件超过了php.ini中的文件大小限制,我们可以打开php.ini这个文件。来找一下; Maximum allowed size for uploaded files.upload_max_filesize = 2M我这里是在第516行,这一句说定义了PHP中上传文件的最大字节数,默认情况下是2MB,这个设置是PHP全局上传限 制,权限最高,即使$_FILES['myfile']['size']设为10MB,也只能上传2MB以下的文件。比如,在默认情况下,如果规 定$_FILES'myfile' < 10MB,在用户上传文件大于2MB的情况下,就会现在$_FILES['teacher_pic']['error'] = 1的情况,一般来说,我们须要把$_FILES'myfile'的值设定在upload_max_filesize值之下(设大了也 没用,呵呵)。当然,你完全可以把php.ini中的upload_max_filesize值调的更大,但实际应用中,我们考虑到服务器的负载能力,不 建议upload_max_filesize的值超过20MB,这样会造成网站附件增大,这在论坛社区上可以很明显的看出来。了解了这些,我们就可以对错误状态作出定义,我们再来完善一下代码,来看一下。?<?phpif($_FILES'myfile' !=''){ if($_FILES'myfile' > 0){ switch($_FILES'myfile'){ case 1: echo "文件大小超过了PHP.ini中的文件限制!"; break; case 2: echo "文件大小超过了浏览器限制!"; break; case 3: echo "文件部分被上传!"; break; case 4: echo "没有找到要上传的文件!"; break; case 5: echo "服务器临时文件夹丢失,请重新上传!"; break; case 6: echo "文件写入到临时文件夹出错!"; break; } }else { if($_FILES['myfile']['type'] =='image/jpeg' or $_FILES'myfile' =='image/pjpeg' or $_FILES['myfile']['type'] =='image/gif' &&$_FILES'myfile' < 20480) { move_uploaded_file($_FILES['myfile']['tmp_name'] ,"uploads/" .$FILES'myfile'); echo "alert(上传成功!);"; }else { echo "alert(请上传小于2MB的jpeg或Gif类型的附件);"; } }}else { echo "alert(请上传文件!);";}?>可以看出,我们使用了switch语句来对6种错状态作出定义,这样来下,在发生错误的时间,用户就会明白,是哪里出了问题。但是还有一种情况就是,用户上传的文件在指定的目录中已经存在,这里我们可以使用file_exists方法来判断一下:?<?phpif($_FILES'myfile' !=''){ if($_FILES'myfile' > 0){ switch($_FILES'myfile'){ case 1: echo "文件大小超过了PHP.ini中的文件限制!"; break; case 2: echo "文件大小超过了浏览器限制!"; break; case 3: echo "文件部分被上传!"; break; case 4: echo "没有找到要上传的文件!"; break; case 5: echo "服务器临时文件夹丢失,请重新上传!"; break; case 6: echo "文件写入到临时文件夹出错!"; break; } }else { if($_FILES['myfile']['type'] =='image/jpeg' or $_FILES'myfile' =='image/pjpeg' or $_FILES['myfile']['type'] =='image/gif' &&$_FILES'myfile' < 20480) { if (!file_exists("uploads/" .$_FILES"myfile")) move_uploaded_file($_FILES['myfile']['tmp_name'] ,"uploads/" .$FILES'myfile'); echo "alert(上传成功!);"; }else{ echo "alert(您上传的文件已经存在!);"; } }else { echo "alert(请上传小于2MB的jpeg或Gif类型的附件);"; } }}else { echo "alert(请上传文件!);";}?>我的个娘呀,终于写完了,一个完整的上传程序终于完成了,这只是上传文件最原始的方法,这样更容易自己理解,使用时大家可以考虑把它写成类现在我们再来总结一下上传中的逻辑判断顺吧。先判断是否上传文件如果有再来判断上传中是否出错如果出错,则提示出错信息如查没出错,再判断文件类型如果类型符合条件,再判断指定目录中有没有存在该文件如果没有就把该文件移至指定目录
2023年08月07日
10 阅读
0 评论
0 点赞