0

私は非常に単純なことをしようとしていますが、それを機能させることができません。参考までに、私は現在 MAMP 開発マシンでテストしていますが、ステージング サーバー (GoDaddy GridHost) から同じ結果を得ています。

これが私がやりたいことです:

  1. ユーザーが指定した画像をフォームからアップロードします。
  2. アップロードした画像のサムネイルを作成します。

私の例には余分なデータベース コードがいくつかありますが、スクリプトはif( ! $this->image_lib->resize())呼び出しで「エラー」を起こします。ただし、アプリケーション全体が終了し、空白のページが表示されます。コードが実際に if{} ブロックに入ることはありません。

function _upload_image(&$location, &$image = NULL)
{
    // Configure the initial full-sized image upload
    $upload_config = array(
        'upload_path' => "./uploads/users/{$this->viewer->id}/locations/{$location->id}/",
        'allowed_types' => 'jpg|jpeg|gif|bmp|png',
        'max_size' => 8192 // 8mb
    );

    $this->load->library('upload', $upload_config);

    // Upload failed
    if( ! $this->upload->do_upload('image'))
    {
        $this->errors = strip_tags($this->upload->display_errors());
        return FALSE;
    }

    // Get the uploaded file's metadata
    $data = $this->upload->data();

    // Change permissions of the uploaded file so that the image library can copy and resize it
    if(is_file($config['upload_path'] . $data['file_name']))
    {
        chmod($config['upload_path'] . $data['file_name'], 0777);
    }

    // If no existing image object was passed to this function, we are creating a brand new image
    if(is_null($image))
    {
        $image = new Image();
        $thumbnail = new Thumbnail();
    }
    else
    {
        $thumbnail = $image->thumbnail->get();  // Get the existing thumbnail
    }

    // Set the image object fields to save to the db
    $image->name = $data['file_name'];
    $image->mime_type = $data['file_type'];
    $image->extension = $data['file_ext'];
    $image->file_path = $data['file_path'];
    $image->full_path = $data['full_path'];
    $image->size = $data['file_size'];
    $image->width = $data['image_width'];
    $image->height = $data['image_height'];

    // Failed to save the image to the db
    if( ! $image->save())
    {
        $this->errors = array_merge($this->errors, array($image->error->string));
        return FALSE;
    }

    // Failed to save the location/image relationship in the db
    if( ! $location->save($image))
    {
        $this->errors = array_merge($this->errors, array($location->error->string));
        return FALSE;
    }

    // Configure options for the thumbnail
    $thumb_config = array(
        'image_library' => 'GD2',
        'source_image' => "./uploads/users/{$this->viewer->id}/locations/{$location->id}/{$image->name}",
        'create_thumb' => TRUE,
        'width' => 400,
        'height' => 300
    );

    $this->load->library('image_lib');
    $this->image_lib->initialize($thumb_config);

    // Failed to create the image thumbnail
    if( ! $this->image_lib->resize())
    {
        $this->errors = array_merge($this->errors, array($this->image_lib->display_errors()));
        return FALSE;
    }

    // Set the thumbnail object fields to save to the db
    $thumbnail->name = $data['raw_name'] . '_thumb' . $data['file_ext'];
    $thumbnail->file_path = $image->file_path;
    $thumbnail->full_path = $image->file_path . $thumbnail->name;

    // Failed to save the thumbnail to the db
    if( ! $thumbnail->save())
    {
        $this->errors = array_merge($this->errors, array($thumbnail->error->string));
        return FALSE;
    }

    // Failed to save the image/thumbnail relationship in the db
    if( ! $image->save($thumbnail))
    {
        $this->errors = array_merge($this->errors, array($image->error->string));
        return FALSE;
    }

    // Everything worked
    return TRUE;
}

データベースのやり取りは、完全を期すために含めた DataMapper ORM によって処理されますが、必ずしもこの問題に関連しているとは思いません。関数は呼び出しで明らかに失敗します。

if( ! $this->image_lib->resize())
4

1 に答える 1

1

index.php ブートストラップでアプリケーション環境を設定しましたか? テスト/運用に設定すると非表示になるエラーが表示される場合があります。

define('ENVIRONMENT', 'development');

それでも問題の診断に役立たない場合は、MAMP で [サーバー] タブに移動し、[PHP] をクリックしてから [ログの表示] をクリックします。これにより、PHP エラー ログ ファイルが開き、何が起きているかがわかります。

于 2012-02-02T10:12:44.433 に答える