PHP类,用于将文件下载和上传到服务器

前言


我以前没有考虑过这一点,因此使用了像Drupal这样的现成解决方案来上传文件,而且我不需要更多了。 直到几个月前,我迫切需要不仅提供文件。

Internet上有很多有关如何从服务器下载文件以及如何将文件上传到服务器以及服务器之间的信息。 但是,没有一个简单的解决方案或多或少具有普遍性。


我花了几天的时间来学习使用cUrl的各种标题和变体,但是将所有内容放在一起是行不通的。 我看到了许多不同的相似类,但是到处都有部分解决方案,或者非常混乱,或者两者兼而有之。


而且,仅由于单篇文章,论坛中的信息以及各种评论,我们才得以解决这个难题。 我不认为我的解决方案是完全通用的,但是在很多情况下都非常方便,尽管这取决于您。


如果有人希望改进我的解决方案并且对此方向缺乏了解,那么如果您对GitHub上公开可用的代码进行了任何更正或添加,我将非常高兴。


至此,CargaDes类的功能如下:


  1. 通过浏览器上传文件而未显示其存储位置,并且有可能恢复;
  2. 通过带有进度指示器的浏览器将文件上传到服务器;
  3. 使用进度指示器将文件从远程服务器下载到服务器;
  4. 使用进度指示器将文件从服务器上载到远程服务器。

首先,您需要下载并连接CargaDes类:


1.通过浏览器上传文件而不显示其存储位置,并具有恢复和速度控制的能力


$realFilePath = dirname( __FILE__ ) . '/file.zip';//     

此方法与Drupal及其同类非常相似:


 $CargaDes = new CargaDes; $client_d = new ClientD($realFilePath); //   $client_d->erroff = false;//True    $client_d->lang = 'ru'; $client_d->speed = 25;//     kB,  0   ; 

我使用Apache添加了更多回扣,但应启用XSendFile On指令


 $client_d->apache = false;//True    Apache(           ) //  $CargaDes->setOnStart(new Exe($client_d)); echo $CargaDes->Start(); 

执行该方法后,浏览器将立即显示一个用于保存文件的窗口


2.通过带有进度指示器的浏览器将文件上传到服务器


 $url_server = "http://_.com/upload.php";//     . $multiple = 0;//True   , False     $CargaDes = new CargaDes; $client_u = new ClientU($url_server, $multiple); //   $client_u->param = 0;//       param -   param=>array( ) $client_u->ajaxParam = '';//    - data.append("key", "val"); $client_u->returns = '';//    ajax $client_u->err_file_zero;//     $client_u->allowed_ext = 'gif,jpg,png,jpe,jpeg,zip,rar,exe,doc,pdf,swf,flv,avi,mp4,mp3';//   $client_u->err_file_ext;//       $client_u->max_file_size = 0;//      ,    $client_u->err_file_size;//       $client_u->max_file_count = 0;//    ,    $client_u->btn_input;//    $client_u->btn_enviar;//    $client_u->btn_del;//      $client_u->color;//    $client_u->css;//    $server->lang = 'ru'; //   $CargaDes->setOnStart(new Exe($client_u, 'p' )); echo $CargaDes->Start(); 

执行该方法后,将出现一个用于选择文件的按钮和一个用于下载文件的按钮。 每个选定文件的指示符将单独出现。



3.将文件从远程服务器下载到您的服务器


 $CargaDes = new CargaDes; $server = new Server(); //  $CargaDes->setOnStart(new Exe($server, 'p')); echo $CargaDes->Start(); $server->remoteUrl = 'http://.com/test/file.zip'; $server->realFilePath = dirname( __FILE__ ) . '/file.zip'; //   $server->progress = 1;///  $server->speed = 0;//  $server->style;//  $server->color;//    $server->erroff = false;//   $server->debug = false;// $server->login = 0;//   ,     .htaccess $server->pass = 0;//   ,     .htaccess $server->lang = 'ru'; //  $CargaDes->setOnStart(new Exe($server, 's')); $r = $CargaDes->Start(); //  if( $r['test'] == false ) {echo $r['result'];} 

4.我们将文件从服务器提供给远程服务器


 $CargaDes = new CargaDes; $server = new Server(); //  $CargaDes->setOnStart(new Exe($server, 'p')); echo $CargaDes->Start(); $server->remoteUrl = 'http://.com/test/priem.php'; $server->realFilePath = dirname( __FILE__ ) . file.zip;//    //   $server->post = array( 'login' => 'test', 'pass' => '12345' );//        $server->progress = 1;///  $server->speed = 0;//  $server->style;//  $server->color;//    $server->erroff = false;//   $server->debug = false;// $server->login = 0;//   ,     .htaccess $server->pass = 0;//   ,     .htaccess $server->lang = 'ru'; //  $CargaDes->setOnStart(new Exe($server, 'u')); $r = $CargaDes->Start(); //  if( $r['test'] == false ) {echo $r['result'];} 

结果,我想说


如果这堂课至少可以帮助一个人,我会很高兴的。 正如我刚开始所说的那样,我将很高兴收到建设性的批评和补充意见,这些意见和意见会导致班级的改善。 链接到CargaDes.class




更改了本文中使用类的方法。 并且他添加了对班级发生变化的描述。


如果可以的话,就可以解决错误。


已经做了什么:


  1. 他使用PHPSTORM将代码统一化,并尝试遵守PSR。
  2. 从函数名称中删除了下划线;
  3. 完全排除jQuery;
  4. 删除了所有静态方法;
  5. 上了一堂作曲家课程;
  6. cUrl用另一种方法制作了鞋垫;
  7. 我试图遵守SRP;
  8. 进行例外处理,并稍微更改错误输出;
  9. 更正了构造函数的主体;
  10. 试图改善if-else结构;
  11. 在课外学习js和html;
  12. 删除了结束标签?>;
  13. 增加了翻译消息的功能;
  14. 添加了一个带有可执行示例的文件夹。

尚未完成的工作:


  1. 将评论翻译成英文(如果这对任何人都没有必要,那么为什么要浪费时间);
  2. 我没有将函数的名称更改为更易于理解的名称(我不清楚哪一个(如果使用英语的话,请看N1点));
  3. 我看了自动测试,但这很好。 普遍以来难以做到 每个人都有自己的行动方案,尽管也许我错了,但是如果您认为在没有人需要的课堂上有必要,您将有机会帮助我。
  4. 还有其他可能,但我还不知道您有什么机会告诉我。

一般而言,如果发现任何其他缺陷或错误,我会尝试修复注释中所说的内容-写,我会尝试修复它。


感谢您对webdeviumalutskevich的建设性批评,如果可以的话,我一定会加您。


我也感谢其他所有人,因为 我了解了自己的主要错误,并产生了一些想法。

Source: https://habr.com/ru/post/zh-CN484492/


All Articles