Помогите добавить проверку ошибок к этой функции - PullRequest
0 голосов
/ 14 октября 2010

Мне нужно добавить некоторую проверку ошибок в эту функцию, чтобы убедиться, что функции imagegif () и imagecolorset () успешны. Обычно причиной сбоя является проблема с разрешениями, когда файл spot2.gif недоступен для записи.

Однако, когда я изменяю spot2.gif только для чтения, условие, которое должно вызывать условия "else", предупреждение javascript echo'd не срабатывает.

function set_theme_color_spot2($hex)
{
    $info = hexToRGB($hex);
    $token = "../wp-content/themes/".get_option('template')."/styles/".get_option('myTheme')."/spot2.gif";
    $token2 = "../wp-content/themes/".get_option('template')."/styles/".get_option('myTheme')."/spot2-template.gif";
    if (file_exists($token2) && is_writable($token)) 
    {
        $img = imagecreatefromgif("../wp-content/themes/".get_option('template')."/styles/".get_option('myTheme')."/spot2-template.gif");
        $color = imagecolorallocate($img, $info["red"], $info["green"], $info["blue"]);
        imagecolorset($img, 0, $info["red"], $info["green"], $info["blue"]);
        imagegif($img, $token);
        $themecolor = get_option('myTheme').'_color4';
        update_option($themecolor, $hex);
    }
    else
    {   
        echo "<script type='text/javascript'>alert('The template colors could not be changed because your current file permissions are too restrictive. Make sure the files in the styles directory are set to 644');</script>";
    }
}

Ответы [ 2 ]

0 голосов
/ 14 октября 2010

Если у вас есть действительный дескриптор изображения, то imagecolorset() не сможет завершиться ошибкой. Это просто установка некоторых значений в таблице где-то. С другой стороны, imagegif() может и не получится, так как имеет дело с файловой системой. К сожалению, он возвращает только истину / ложь, а не какие-либо подробности диагностики, которые были бы полезны (было бы полезно знать, если произошел сбой, потому что у вас недостаточно места на диске, разрешение на запись в файл запрещено, разрешение на доступ в каталог нет такого файла / dir и т.д ...).

Итак, просто сделайте:

if (!imagegif($handle, 'testfile.gif')) {
    die("Unable to write gif out");
}

с любой диагностической информацией, которую вы хотели бы сохранить. Вы также можете попробовать использовать error_get_last(), но нет никакой гарантии, что GD заполнит это чем-нибудь полезным при сбое.

0 голосов
/ 14 октября 2010

Почему бы не вызвать is_writable на spot2.gif, прежде чем пытаться получить к нему доступ?

http://php.net/manual/de/function.is-writable.php

...