This is an old revision of the document!


PHP's gd library is missing or unable to create PNG images

Image Expression Null Value Handling

General Rules for Expression Definition

  • The entire expression is one single expression resulting in one single value.
  • Everything is an expression and produces one single value. So, even an “if then else” is just one expression resulting in one single value. Therefore, you can sum the results of two separate “if then else”s like “(if the else) + (if then else)”. Since even the test clause of an “if then else” is an expression, you can also replace that with another “if then else”. Example:
    • if (if i1 > 0 then 1 else i2) then i2 else 1 + i3
  • The “if then else” test assumes that 0 is false and any non-zero value is true.

Null Evaluation

  • Every time the expression being evaluated results in null, the entire expression becomes null. So, “i1 + null” will always be null since something + null is always null.
  • The only operators that can contain the “destructive power” of a null value are isnull( expression ) or expression1 ? expression2:
    1. isnull( expression ) evaluates the expression and results 1 if the expression evaluates to null, and 0 otherwise.
    2. expression1 ? expression2 evaluates the expression1 and, if the result is non-null, returns that value. Otherwise, it evaluates expression2 and returns the resulting value as its own result.
  • Null can come from an image, but it can also be produced by some other events, such as dividing by zero, failing to find a key in a lookup table etc.
  • If the “if then else” test evaluates to null, the entire “if then else” evaluates to null. Example:
    • (if (i1/3 > 9) then i2 else 1 + i3) + 10

1. if i1 is null, i1/3 is also null, and i1/3 > 9 also becomes null. Therefore, the “if then else” test is null and the entire “if then else” is null.

    2. Now, null is being added to 10, and that also becomes null.
  * '((if (i1/3 > 9) then i2 else 1 + i3) + 10) ? 20' (Note that we are using the operator ? now)
    1. if  i1 is null, i1/3 is also null, and i1/3 > 9 also becomes null. Therefore, the "if then else" test is null and the entire "if then else"  is null. 
    2. Then, null is being added to 10, and that also becomes null.
    3. Now, null is being caught by the expression "null ? 20", since the "if then else" + 10 is null, and the result is 20.