我的Windows机器上有本地wamp服务器。 在www目录中,我有一个名为project的文件夹。 C:WWW /项目/ index.php的
。下一个相同的路径,我有保存目的地位置的目录c:www / project / downloads。
当我运行我的localhost http://localhost:8089/curl/index.php
时这是我的代码:
<?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); } ?>
你可以请一些人帮忙吗?
非常感谢, 帕拉尼
答案 0 :(得分:2)
在returnExtension函数
处替换下面的行$end = end(preg_split("/[.]+/", $url));
与
$result = preg_split("/[.]+/", $url);
$end = end($result);
答案 1 :(得分:0)
您必须更改此行:
$end = end(preg_split("/[.]+/", $url));
到
$urlParts = preg_split("/[.]+/", $url);
$end = end($urlParts);
这不是一个真正的错误,而是一个严格的标准通知。 这是因为php只需要通过引用传递的变量,而preg_split的返回不是变量。