2010-10-14 2 views
0

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

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

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>"; 
    } 
} 

ответ

0

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

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

+0

Это имеет смысл для меня. Я обновил свой вопрос и добавил проверку is_writable в условном блоке. Тем не менее, его все еще выполняется, даже когда spot2.gif настроено вручную только для чтения ... Любые идеи? –

0

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

Так, просто сделать:

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

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