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 回答