2016-11-04 206 views
0

我在我的Windows机器中有本地wamp服务器。 在www目录中我有文件夹称为项目。 C:WWW /项目/ index.php文件。从URL URL的PHP​​ curl下载文件

和下一个相同的路径,我有目录来保存目标位置c:www/project/downloads。

当我跑我的本地http://localhost:8089/curl/index.php

我有以下这里连接错误,错误的图像。 php curl method download file

这是我的代码:

 <?php class download { 

    const URL_MAX_LENGTH = 3000; 

    protected function cleanUrl($url) { 
     if(isset($url)){ 
      if(!empty($url)){ 
       if(strlen($url) < self::URL_MAX_LENGTH) { 
        return strip_tags($url); 
       } 
      } 

     } 
    } 

    //is url 
    protected function isUrl($url) { 
    $url = $this->cleanUrl($url); 
    if(isset($url)) { 
     if(filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED)) { 
      return $url; 
     } 
    } 
} 

    protected function returnExtension($url) { 
     if($this->isUrl($url)) { 
      $end = end(preg_split("/[.]+/", $url)); 
      if(isset($end)) { 
       return $end; 
      } 
     } 
    } 

    public function downloadFile($url) { 
     if($this->isUrl($url)) { 
      $extension = $this->returnExtension($url); 
      if($extension) { 
       echo $url; 
       $ch = curl_init(); 
      curl_setopt($ch, CURLOPT_URL, $url); 
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, false); 
      $return = curl_exec($ch); 

      $destination = "downloads/file.$extension"; 
      $file = fopen($destination, "w+"); 
      fputs($file, $return); 
      } 
      if(fclose($file)){ 
       echo "File Download"; 

      } 

     } 

    } 

    } 


$obj = new Download(); 
if(isset($_POST['url'])) { $url = $_POST['url']; } ?> 

<form action="http://localhost:8089/curl/index.php" method="post"> 

    <input type="text" name="url" maxlength="3000"/> 
    <input type="submit" value="download"/> 

</form> 

<?php if(isset($url)) { $obj->downloadFile($url); } ?> 

,你可以请一些这方面的一个帮助吗?

非常感谢, 帕拉尼

回答

2

替换下面一行在returnExtension功能

$end = end(preg_split("/[.]+/", $url)); 

$result = preg_split("/[.]+/", $url);  
$end = end($result); 
+0

HI周杰伦,谢谢你的帖子,现在它正在工作文件:) – user6420577

+0

欢迎..... :) –

0

你必须改变这一行:

$end = end(preg_split("/[.]+/", $url)); 

$urlParts = preg_split("/[.]+/", $url); 
$end = end($urlParts); 

这不是一个真正的错误,而是一个严格的标准通知。 这是因为php只想通过引用传递变量,并且preg_split的返回不是变量。

+0

可以请你说出你的答案与@Jay Gosai不同吗? –