Thursday, March 10, 2005
Lovely … I get to debug code in PHP
I made a test order and when I clicked confirm order the next page said page cannot be displayed or error page, I am not sure. Please place a test order and let us know if it is working properly.
Trouble ticket I recieved this afternoon.
And thus I started my descent into osCommerce, written in PHP of course.
It took long enough, but I was able to finally track the problem down to the following bit of code:
function tep_href_link( $page = '', $parameters = '', $connection = 'NONSSL', $add_session_id = true, $search_engine_safe = true ) { global $request_type, $session_started, $SID; if (!tep_not_null($page)) { die( error message with embedded HTML code, of course ); } if ($connection == 'NONSSL') { $link = HTTP_SERVER . DIR_WS_HTTP_CATALOG; } elseif ($connection == 'SSL') { if (ENABLE_SSL == true) { $link = HTTPS_SERVER . DIR_WS_HTTPS_CATALOG; } else { $link = HTTP_SERVER . DIR_WS_HTTP_CATALOG; } } else { die( yet another error message with embedded HTML code ); } // rest of function deleted }
catalog/includes/functions/html_output.php
The checkout code is running under a secure server
(secure.example.net
) while the actual
site itself is under a different domain
(www.example.com
) and for some reason, the
code, in generating the link, is getting things mixed up and the link is
being generated incorrectly. It's getting the secure server name
(HTTPS_SERVER
) but tacking on the location on the non-secure
site (DIR_WS_HTTP_CATALOG
) and thus leading to the dreaded 404 Not Found
error.
I'm not really keen on trying to debug this any futher than I have to (the osCommerce package comprises over 500 files), I basically changed the code to look like:
if ($connection == 'NONSSL') { $link = HTTPS_SERVER . DIR_WS_HTTPS_CATALOG; // XXX - spc hack } elseif ($connection == 'SSL') { // rest snipped
It works (even if it is a hack). Customer is happy. I'm happy (that I no longer have to dig into this program).
Now back to the salt mines—the customer is now wondering why he isn't getting his email …