2017-10-29 11 views
0

원래 도메인 이름에 저장된 dl.php 파일을 통해 하위 도메인에 저장된 파일을 다운로드 할 수있는 방법 (dl1.example.com) (example.com/dl.php?id=12)어떻게 php 헤더를 통해 다른 서버에 저장된 파일에 액세스 할 수 있습니까?

이에 있는가 필요의이 다운로드로 해당 파일의 경우는 DL1에있는 (다른 서버에서 하위 도메인과의 cPanel에 추가 DNS 레코드 옵션을 통해 연결) PHP 헤더 작업

dl.php이

URL을 가져온 고객에 대한 링크를 만들 수있다 db ($ path)에서 다음 함수의 입력으로 사용됩니다.

downloadFile($path,$file_name, 1024, false); 
내가 다운로드 링크

을 만들기 위해 하위 도메인을 사용할 때, 내 문제가 발생 내 마스터 도메인 이름에 저장된 파일에 문제가없는

$path="http://dl1.example.com/Lamp%20with%20phpmyadmin.mp4"; 

:

$ 경로 변수는 변수 아래 같은 것을 포함입니다 내 코드의

모든 :

/* List of File Types */ 
function fileTypes($extension){ 
$fileTypes['swf'] = 'application/x-shockwave-flash'; 
$fileTypes['pdf'] = 'application/pdf'; 
$fileTypes['exe'] = 'application/octet-stream'; 
$fileTypes['zip'] = 'application/zip'; 
$fileTypes['doc'] = 'application/msword'; 
$fileTypes['xls'] = 'application/vnd.ms-excel'; 
$fileTypes['ppt'] = 'application/vnd.ms-powerpoint'; 
$fileTypes['gif'] = 'image/gif'; 
$fileTypes['png'] = 'image/png'; 
$fileTypes['jpeg'] = 'image/jpg'; 
$fileTypes['jpg'] = 'image/jpg'; 
$fileTypes['rar'] = 'application/rar'; 

$fileTypes['ra'] = 'audio/x-pn-realaudio'; 
$fileTypes['ram'] = 'audio/x-pn-realaudio'; 
$fileTypes['ogg'] = 'audio/x-pn-realaudio'; 

$fileTypes['wav'] = 'video/x-msvideo'; 
$fileTypes['wmv'] = 'video/x-msvideo'; 
$fileTypes['avi'] = 'video/x-msvideo'; 
$fileTypes['asf'] = 'video/x-msvideo'; 
$fileTypes['divx'] = 'video/x-msvideo'; 

$fileTypes['mp3'] = 'audio/mpeg'; 
$fileTypes['mp4'] = 'audio/mpeg'; 
$fileTypes['mpeg'] = 'video/mpeg'; 
$fileTypes['mpg'] = 'video/mpeg'; 
$fileTypes['mpe'] = 'video/mpeg'; 
$fileTypes['mov'] = 'video/quicktime'; 
$fileTypes['swf'] = 'video/quicktime'; 
$fileTypes['3gp'] = 'video/quicktime'; 
$fileTypes['m4a'] = 'video/quicktime'; 
$fileTypes['aac'] = 'video/quicktime'; 
$fileTypes['m3u'] = 'video/quicktime'; 
return $fileTypes[$extention]; 
}; 

/* 
Parameters: downloadFile(File Location, File Name, 
max speed, is streaming 
If streaming - videos will show as videos, images as images 
instead of download prompt 
*/ 
function downloadFile($fileLocation, $fileName, $maxSpeed = 100,  $doStream = false) { 
if (connection_status() != 0) 
    return(false); 
// in some old versions this can be pereferable to get extention 
// $extension = strtolower(end(explode('.', $fileName))); 
$extension = pathinfo($fileName, PATHINFO_EXTENSION); 

$contentType = fileTypes($extension); 
header("Cache-Control: public"); 
header("Content-Transfer-Encoding: binary\n"); 
header('Content-Type: $contentType'); 

$contentDisposition = 'attachment'; 

if ($doStream == true) { 
    /* extensions to stream */ 
    $array_listen = array('mp3', 'm3u', 'm4a', 'mid', 'ogg', 'ra', 'ram', 'wm', 
     'wav', 'wma', 'aac', '3gp', 'avi', 'mov', 'mp4', 'mpeg', 'mpg', 'swf', 'wmv', 'divx', 'asf'); 
    if (in_array($extension, $array_listen)) { 
     $contentDisposition = 'inline'; 
    } 
} 

if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) { 
    $fileName = preg_replace('/\./', '%2e', $fileName, substr_count($fileName, '.') - 1); 
    header("Content-Disposition: $contentDisposition; 
     filename=\"$fileName\""); 
} else { 
    header("Content-Disposition: $contentDisposition; 
     filename=\"$fileName\""); 
} 

header("Accept-Ranges: bytes"); 
$range = 0; 
$size = filesize($fileLocation); 

if (isset($_SERVER['HTTP_RANGE'])) { 
    list($a, $range) = explode("=", $_SERVER['HTTP_RANGE']); 
    str_replace($range, "-", $range); 
    $size2 = $size - 1; 
    $new_length = $size - $range; 
    header("HTTP/1.1 206 Partial Content"); 
    header("Content-Length: $new_length"); 
    header("Content-Range: bytes $range$size2/$size"); 
} else { 
    $size2 = $size - 1; 
    header("Content-Range: bytes 0-$size2/$size"); 
    header("Content-Length: " . $size); 
} 

if ($size == 0) { 
    die('Zero byte file! Aborting download'); 
} 
set_magic_quotes_runtime(0); 
$fp = fopen("$fileLocation", "rb"); 

fseek($fp, $range); 

while (!feof($fp) and (connection_status() == 0)) { 
    set_time_limit(0); 
    print(fread($fp, 1024 * $maxSpeed)); 
    flush(); 
    ob_flush(); 
    sleep(1); 
} 
fclose($fp); 

return((connection_status() == 0) and ! connection_aborted()); 
} 

/* Implementation */ 
// downloadFile('path_to_file/1.mp3', '1.mp3', 1024, false); 


if(isset($_GET['i']) && is_numeric($_GET['i'])){ 
$file_id=input_security($_GET['i']); 
$linkque=mysqli_query($connection,"SELECT * FROM download_links WHERE dl_id='".$file_id."'"); 
$checkexist=mysqli_num_rows($linkque); 
$f_row=mysqli_fetch_array($linkque); 
    if($checkexist==0){ 
     echo 'Invalid file id'; 
    }else if($checkexist>=1 && $f_row['payment_model']=="free"){ 
    /* Function: download with resume/speed/stream options */ 
     $path=$f_row['url']; 
     $sep_parts = pathinfo($path); 
     $file_name = $sep_parts['basename']; 
     $file_ext = $sep_parts['extension']; 
     if (file_exists($path)) { 
     downloadFile($path,$file_name, 1024, false); 
     }else{ 
      echo "File is not exist or url is wrong."; 
     } 
}else if($checkexist>=1 && $f_row['payment_model']=="nofree"){ 
    if(isset($_SESSION['username'])){ 

    $client_id=input_security($_SESSION['username']); 
    $client_id_query="SELECT userid FROM users WHERE emailuser='".$client_id."'"; 
    $session_query=mysqli_query($connection,$client_id_query); 
    $clientidrow=mysqli_fetch_assoc($session_query); 
    $client_id=$clientidrow['user_id']; 
    $link_pid=$f_row['post_id']; 
     $userorderque=mysqli_query($connection,"SELECT * FROM user_orders WHERE post_id='".$link_pid."' AND order_client_id='".$client_id."'"); 
     $checkorderexist=mysqli_num_rows($userorderque); 
     $checktobuy_row=mysqli_fetch_array($userorderque); 


     if($checkorderexist>=1 && $checktobuy_row['paid']==1){ 

     $path=$f_row['url']; 
     $sep_parts = pathinfo($path); 
     $file_name = $sep_parts['basename']; 
     $file_ext = $sep_parts['extension']; 
     if (file_exists($path)){ 
     //echo "thank you for purchase and support us. You can download now."; 
      downloadFile($path,$file_name, 1024, false); 
     }else{ 
      echo "File is not exist or url is wrong."; 
     } 
     }else if($checkorderexist>=1 && $checktobuy_row['paid']==0){ 
      echo "You Need to pay for download this file"; 
     } 
    }else{ 
     echo "This file needs to login"; 
    } 



}else{ 
    echo "You don't have permission to download this file please purchase this product and trying to download again"; 
    } 
}else{ 
    header('Location: index.php'); 
} 

어떻게에 저장된 내 스크립트 (dl1.example.com) 하위 도메인으로 내 도메인 이름에 연결되어 내 다른 서버에 저장된 파일에 액세스 할 수 있습니다 내 도미 n 이름 (내 마스터 웹 서버 호스트 (example.com)을 의미)?

나는 당신의 통신 흐름이 얼마나 그것은 100 % 명확하지 않다 어떤 도움

+1

당신이하려는 일이 명확하지 않습니다. – Scriptonomy

+0

제품 링크를 공유하고 싶지만 지불하는 고객 만 있습니다. –

답변

0

을 주셔서 감사합니다,하지만 당신의 묘사에서 당신은 크로스 도메인 문제를 해결.

header("Access-Control-Allow-Origin: *"); 
다른 환경을 사용하여

좋은 예는 여기에서 찾을 수 있습니다 :

https://enable-cors.org/

당신은 다운로드 서버의 응답이 헤더를 추가하여 서버의 도메인 간 호출을 허용하여 계속 할 수있을 것
+0

헤더 ("Access-Control-Allow-Origin : *"); 일하지 않았습니까? 간단한 예를 하나만 보여 주시겠습니까? –

+0

나는 이것에 관해 우리가 잠시 동안 채팅 할 수 있었다고 생각한다. 교차 도메인이 실제로 문제가되는지 사례 설명에서 명확히 알 수 없습니다. 그렇다면 특정 환경에 대한 특정 솔루션을 직접 찾아 보거나 그에 따라 자세한 내용을 제공하는 질문을 업데이트해야합니다. – Harry