2009-04-14 8 views
0

move_uploaded_file()을 통해 업로드 된 파일을 PHP로 저장할 때 절대 URL을 사용할 수 없습니다. 상대 URL을 사용해야합니다. 내 사이트에는 http 디렉토리와 https 디렉토리에 각각 루트 디렉토리 (httpdocs와 httpsdocs)가 있습니다. 따라서 내 스크립트가 https 측면에 있다면 http 쪽의 위치에 파일을 저장하려면 어떻게해야합니까?PHP : PHP로 파일을 다른 루트 디렉토리에 저장 하시겠습니까?

감사합니다.

UPDATE 내가 이런 식으로 일을하고 내가 잘못된 절대 경로 규칙을 사용하고 있습니다 보인다 있도록 OK : 당신이 절대 경로를 사용할 수없는 경우

$dir = 'https://www.mydomain.com/masonic_images/'; 
move_uploaded_file($_FILES['blue_image']['tmp_name'], $dir.$new_name); 
+0

왜 절대 경로를 사용할 수 없습니까? –

+0

@Chad 절대 경로를 사용하면 오류가 발생합니다. "경고 : move_uploaded_file() : URL 파일 액세스가 서버 구성에서 비활성화되었습니다." .htaccess 파일에서 조정할 수있는 것이 있습니까? –

+0

move_uploaded_file 호출을 표시 할 수 있습니까? 파일 경로 대신 URL을 넣으면 작동하지 않는 것 같습니다. –

답변

1

httpdocs 및 httpsdocs 디렉토리가 모두 동일한 상위 폴더에 있습니까? 그렇다면 move_uploaded_file의 두 번째 매개 변수에 상대 경로를 사용하여 파일을 다른 루트 디렉토리에 배치하십시오. 예를 들어

:

$uploaddir = '../httpdocs/'; 
$uploadfile = $uploaddir . basename($_FILES['myfile']['name']); 

이 코드는 업로드 스크립트가 httpsdocs 루트 디렉토리에 있다고 가정하고 httpdocs 디렉토리에 파일을 저장하려는.

+0

감사합니다. 나는 당신이 말한 것을 시도해 본 결과이 오류가 발생했다. "경고 : move_uploaded_file() : open_basedir 제한 사항의 파일. ../../ httpdocs/masonic_images/41_red_391-1-l.jpg)이 허용 된 경로 " –

+1

웹 서버는 PHP가 현재 사이트 루트 외부의 모든 파일 액세스를 차단하도록 구성되어 있습니다. open_basedir 제한을 해제 할 수있는 경우가 아니면 다른 디렉토리에 이미지를 배치 할 수 없습니다. –

+0

@ 존은 .htaccess로 그렇게 할 수있는 방법이 있습니까? 감사합니다 –

2

당신이 무엇을 알 수 없기 때문에 절대 경로는 PHP의 realpath()를 사용하여 PHP가 무엇인지 파악한 다음 사용하는 것입니다.

5

move_uploaded_file()은 두 매개 변수에 대한 URL을 허용하지 않습니다. 대상은 파일 시스템의 절대 경로입니다.

<?php 
$dir = '/var/www/httpsdocs/'; // Adjust to your configuration 
move_uploaded_file($_FILES['blue_image']['tmp_name'], $dir.$new_name); 

as @apphacker가 제안되었습니다. realpath(__FILE__)을 사용하여 파일의 절대 경로를 결정할 수 있습니다.

+0

그럼 절대 경로를 올바르게 쓰려면 어떻게해야합니까? –

+0

예제가 업데이트되었습니다. 절대 경로는 "/"로 시작합니다. URL에는 "[프로토콜] : //"이 있습니다. – matpie

+0

고맙습니다. 당신의 도움을 위해 1 + up을주었습니다! –

1

업로드 된 파일을 httpdocs 안에 넣었으므로 PHP 파일을 업로드하고 임의 코드를 실행할 수 있음에 유의하십시오.

+0

조언을 주셔서 감사합니다. 직원이 제품 이미지를 업로드하는 것이지만 사용자는이 기능을 사용하지 않습니다. –

관련 문제