"There is no spoon" or: Unexpected error 0xdeadbeef in PHP
<p>I have some PHP code, listed below. I have a trap that tells me if the data input does not match any of the tests in the code ("There is no spoon", it says. Clever, eh?). </p>

<p>The trouble comes when data - that isn't unusual in any way that <strong>I</strong> can see, and for that matter, is completely similar to other data that survives this trap - that <em>does</em> match one of the tests somehow makes it through anyway. And of course, the "unexpected error" error outputs the data that was input, just to make sure. As far as I can tell, that input data has nothing wrong with it.</p>

<p>First, there's the output, which might make things a little easier to understand:</p>

<pre>
Customer XXXXXXXXXXXX, DID XXXXX2515  has been billed already for 2010-01.
Deleting last billing from database before continuing.
This DID is a Toll Free Number.
Trunkrate is therefore: 0.05
Starting billing for DID XXXXXX2515
Trunkrate: 0.05 Type: TFN

2010-01-22 15:45:15: billsecs: 22 billMin: 1 Source: XXXXXX0808 Destination: XXXXXX2515
Error 34: There is no spoon.
Source: XXXXXX0808 Destination: XXXXXX2515 Did: XXXXXX2515  Type: TFN

2010-01-12 14:49:41: billsecs: 55 billMin: 1 Source: 0000000000 Destination: XXXXXX2515
Error 34: There is no spoon.
Source: 0000000000 Destination: XXXXXX2515 Did: XXXXXX2515  Type: TFN

2010-01-12 11:46:45: billsecs: 6 billMin: 1 Source: XXXXXX8689 Destination: XXXXXX2515
Error 34: There is no spoon.
Source: XXXXXX8689 Destination: XXXXXX2515 Did: XXXXXX2515  Type: TFN

2010-01-08 12:56:57: billsecs: 610 billMin: 11 Source: XXXXXX2515 Destination: 1XXXXXX0798
Error 34: There is no spoon.
Source: XXXXXX2515 Destination: 1XXXXXX0798 Did: XXXXXX2515  Type: TFN

2010-01-07 11:01:49: billsecs: 17 billMin: 1 Source: XXXXXX2515 Destination: 011XXXXXXX41022
Error 34: There is no spoon.
Source: XXXXXX2515 Destination: 011XXXXXXX41022 Did: XXXXXX2515  Type: TFN

2010-01-05 11:20:24: billsecs: 7 billMin: 1 Source: XXXXXX0928 Destination: XXXXXX2515
Error 34: There is no spoon.
Source: XXXXXX0928 Destination: XXXXXX2515 Did: XXXXXX2515  Type: TFN
</pre>

<p>And, on with the code: </p>

<pre><code>// If the call is incoming, just charge the trunk rate.
if ($thisCall['dst'] == $did &amp;&amp; $type == "IAX") {
    $ldrate = 0;
    $location = "British Columbia";
    $calltype = "NALD";

if ($debug) print "Incoming call to IAX trunk.\n";

// Incoming calls to TFNs
} elseif ($thisCall['dst'] == $did &amp;&amp; $type == "TFN") {

    $ldrate = 0;
    $location = "Toll-Free";
    $calltype = "NALD";

// If the call is outgoing, check to see if it's local
} elseif ($thisCall['src'] == $did) {

    // If the outgoing call is local, just charge the trunk rate
    // In this case, src is our customer, dst is remote end
    if (callIsLocal($thisCall['src'], $thisCall['dst'])) {
        $ldrate = 0;
        $location = "British Columbia";
        $calltype = "NALD";
    }

    // If the outgoing call is long distance, get the rate from the database
    else {
        $ratearr = getRate($thisCall['dst']);

        $ldrate = $ratearr['ldrate'];
        $location = $ratearr['location'];
        $calltype = $ratearr['calltype'];

        if ($debug) print "LDrate: $ldrate, Location: $location, Calltype: $calltype\n";
    }
} else {
    print "Error 34: There is no spoon.\n";
    print "Source: " . $thisCall['src'] . " Destination: " . $thisCall['dst'];
    print " Did: $did Type: $type\n ";
    continue;
}
</code></pre>
