2012-01-30 3 views
4

Drupal에 새로 추가되어 현재 프로그래밍 방식으로 노드를 만들어야합니다.drupal에 이미지 필드를 추가 할 수 없습니다.

간단한 노드를 만들 수 있습니다. 그러나 이미지 필드와 통합하면 항상 실패합니다. "공공"

$file_path = drupal_realpath('tmp/test_image.jpg'); 
$file = (object) array(
    'uid' => 1, 
    'uri' => $file_path, 
    'filemime' => file_get_mimetype($file_path), 
    'status' => 1, 
); 
$copy = file_copy($file, 'public://sites/default/files/field/image/testing/', FILE_EXISTS_RENAME); 
$node->field_image[LANGUAGE_NONE][0] = (array) $copy; 

은 항상 나에게 오류 :(

The specified file could not be copied, because the destination directory is not properly configured. This may be caused by a problem with file or directory permissions. More information is available in the system log. 
+2

이미지 폴더에 '644' 또한 시스템 로그를 다음과 같이 확인하십시오. 오류가있는 것으로 제안되었습니다. – Rikesh

+0

안녕하세요, 저는 이미 전에도 시도했습니다. 나는 사이트 폴더를 777로 설정하기도했다. 로그를 확인했는데 여기에 내가 가진 것이있다. "대상 디렉터리 public : //이 (가) 올바르게 구성되지 않았기 때문에 이미지를 복사 할 수 없습니다." – claire

+0

'public' 스키마에 대한 기본 경로는'/ sites/default/files'입니다. 그래서'/ sites/default/files/my-images/image1.jpg'와 같은 것을 저장하고 싶다면 URI는 'public : // my-images/image1.jpg'가되어야합니다. 양식 제출의 결과로이 노드를 저장하는 경우 [관리되는 파일 형식] (http://api.drupal.org/api/drupal/developer--topics--)을 살펴 보는 것이 좋습니다. forms_api_reference.html/7 # managed_file) 모든 파일을 저장할 수있게 처리합니다. – Clive

답변

0

난 당신이 file_copy()을 말할 경우에 저장하는 생각으로 돌아갑니다., 전체 경로 이름을 지정하지 않아야을 적어도, 앞에서 본 예제에서 대상은 'public:filename.ext'과 비슷하게 보입니다.

위의 설명에서 알 수 있듯이 로그를 확인하십시오. 웹 서버의 오류 로그 외에 Drupal에서 자세한 내용을 기록했는지 확인하십시오. 보고서 섹션.

+0

나는이 공개 디렉토리가 어떻게 작동하는지 잘 모르겠다. 왜냐하면 그 디렉토리가 디렉토리인지 검사 할 때 결과가 틀렸기 때문이다. – claire

0

'public://' = 'sites/default/files' (또는 기본 파일 폴더로 지정된 다른 폴더)는 Drupal 방식입니다.

귀하의 코드 :

$copy = file_copy($file, 'public://field/image/testing'); 

P.S. FILE_EXISTS_RENAME은 기본적으로 실행되므로 정의 할 필요가 없습니다.

+0

안녕하세요, 아직도 노력하지 않았습니다. 이것은 폴더의 관심과 관련이있을 수 있습니다. 하지만 공용 폴더는 이미 644로 설정되어 있습니다. – claire

+0

공용 폴더는 777로 설정되어야합니다. 오류가있을 경우 Drupal 상태를 확인하십시오. '$ copy = file_copy (...)'다음에'print_r ($ copy)'를 쓰면 무엇을 줄 것인가? –

+0

null을 반환합니다. – claire

0

입력 해 주셔서 감사합니다. 공용 경로 'sites/default/files'를 'testing'또는 다른 폴더로 설정하고 644로 설정하려고 시도했습니다.

작동합니다. :(

여기 내 업데이트 된 코드입니다. 저도 같은 문제가 있었 다른 내가 사이트 및 하위 폴더에 설정하는 데 필요한 권한.

+0

파일 폴더와 모든 하위 폴더가 있어야한다. 777로 설정하십시오. 또한 해당 폴더의 소유자가 시스템 사용자가 아닌 'www-data'인지 확인하십시오. –

2

$file_path = drupal_realpath('test_image.jpg'); 
$file = (object) array(
    'uid' => 1, 
    'uri' => $file_path, 
    'filemime' => file_get_mimetype($file_path), 
    'status' => 1, 
); 
$copy = file_copy($file, 'public://', FILE_EXISTS_RENAME); 

임 확실하지. 내 경우에는 문제는 미디어 구성 "공용 파일 시스템 경로"가 상대 경로 사이트/기본/파일로 설정되었다는 것입니다. 그 후 모든 루트에서 절대 경로를 설정했습니다.

관련 문제