2012-01-30 12 views
4

Drupalに新規Imとなり、プログラムでノードを作成する必要があります。drupalに画像フィールドを追加できません7

私は単純なノードを作成することができます。しかし、それをイメージフィールドに組み込むと、常に失敗します。

$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'になります。フォームの提出の結果としてこのノードを保存している場合は、['managed file' type](http://api.drupal.org/api/drupal/developer--topics--)を調べることを強くお勧めします。 forms_api_reference.html/7#managed_file)あなたのために保存するすべてのファイルを処理します – Clive

答えて

0

私はあなたがfile_copy()を伝える場合に保存することを考えて、「公共:」、あなたは完全なパス名を指定しないでください。少なくとも、。私が見た例では、ターゲットは'public:filename.ext'のように見えます。

上記のコメントから分かるように、ログを確認してください。Webサーバーのエラーログに加えて、Drupalがレポートセクション。

+0

このパブリックディレクトリの仕組みはよく分かりません。なぜなら、そのディレクトリがあるかどうかを調べると結果が偽であったからです。 – claire

0

'public://' = 'sites/default/files'(またはデフォルトファイルフォルダとして指定された他のフォルダ)は、Drupalの方法で指定します。

あなたのコード:

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

P.S. FILE_EXISTS_RENAMEはデフォルトで使用されるため、定義する必要はありません。

+0

こんにちは、私はそれがまだdoesnt仕事を試みました。これは、フォルダの見落としと関係があるかもしれません。しかし、私はすでにパブリックフォルダを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); 

イムわからない。 私の場合は問題は、メディア構成 "Public file system path"が相対パスのサイト/デフォルト/ファイルとして設定されていたことです。その後、すべてのルートから絶対パスが設定されました。

関連する問題