PHP는

2013-03-20 2 views
-1

내가 먼저 내가 ... 나 직장에서PHP는

너무 베어 개발자가 아닌 서버 관리 해요 가정 해 봅시다, 우리는 우리의 PHP를 개발 탑재 된 네트워크 드라이브에 파일을 업로드 (쓰기) 이동할 수 없습니다 각 Windows 컴퓨터의 공유 로컬 디렉토리에서 작업 파일을 편집하여 웹 기반 응용 프로그램을 만들 수 있습니다. 그런 다음 (linux) 스테이징 서버는 공유 드라이브를 마운트하고 서브 도메인 아래에서 각각을 제공합니다. 예 : joe.work.com은 Joe의 작업 디렉토리를 제공합니다. 그런 다음 호스트 파일을 편집하여 스테이징 서버에 하위 도메인을 지정하여 자체 스테이징 사이트에 액세스하면 모든 작업이 훌륭합니다!

PHP가 업로드 된 파일을 tmp 디렉토리에서 마운트 된 디렉토리의 디렉토리 (실제로 공유 된 Windows 드라이브 ...)로 옮길 수있는 권한이없는 것 같습니다. .

Windows 컴퓨터의 작업 디렉토리는 모든 사용자가 rw를 허용하도록 설정되어 있으며 준비 시스템의 마운트 된 디렉토리에 777을 넣으려고했지만 권한이 거부되었습니다.

예를 들어, \\joes_machine\joes_working_dir은 스테이징 서버에 /var/mnt/joe으로 마운트됩니다. 파일 업로드를 /images/common (으)로 이동해야합니다.

약간이 예를 들어 아래로 무식하게 긴하지만

, 난 아무것도 공상 코드 현명하고 있지 않다 :

$working_directory = '/var/mnt/joe'; 
$image_directory = '/images/common/'; 
$full_filename = $working_directory . $image_directory . $filename; 
if(move_uploaded_file($_FILES['photo']['tmp_name'], $full_filename)) 
    // do some other stuff 

물론 내 오류 : 어떤 내가 파일에 대해 이해하고 있지 않다

Message: move_uploaded_file(/var/mnt/joe/images/common/resulting_filename.jpg): 
    failed to open stream: Permission denied 
Message: move_uploaded_file(): Unable to move '/tmp/phpjsEfBc' to 
    '/var/mnt/joe/images/common/resulting_filename.jpg' 

Linux와 PHP가 네트워크를 통해 마운트되는 Windows 공유 드라이브와 관련된 권한? 나는 그 전화를 찾는 것처럼 보이지 않는다!

일단 제작을 시작하면 우리는 스키마를 사용하지 않을 것이지만, 현재 개발 환경에서 계속할 수있는 간단한 해결책이 있다면 이상적입니다! (그리고 나는 아마도 여기에서 뭔가를 배울 것입니다 : P)

미리 감사드립니다!

답변

4

몇 시간의 facerolling 후, 나는 마침내 내가 놓친 것을 발견했다. 문제는 제공된 자격 증명이 예상대로 탑재 된 디렉터리에 쓸 수 없다는 것입니다. 나는이 문제를 해결할 수 있었던 방법은 다음과 같이 마운트 명령을 편집하여이었다

mount -t cifs //shared/directory /mount/target 
    -o rw,username=connectionuser,password=password,uid=48 

때문에, usernamepassword 드라이브에 연결하는 데 사용되는 Windows 자격 증명 수 있지만, uid는의 고유 식별자를 지정합니다 Apache가 실행되는 스테이징 서버의 로컬 사용자가 마운트 된 디렉토리에 쓸 수 있습니다.

이전에는 로컬 사용자의 uid를 지정하지 않았기 때문에 아파치가 마운트 된 디렉토리에 쓰기를 시도 할 때 '로컬'드라이브에 쓸 수없는 Windows 자격 증명을 사용하려고했습니다.

희망이 있습니다.