Source code of file oscpmwin_v0.4.1.683/oscpm1_upload.txt from the
osCommerce Product Manager for Windows.
0000: <?php
0001: // osCommerce Product Manager for Windows (oscpmwin).
0002: // Copyright �2003-2007 by Mario A. Valdez-Ramirez.
0003:
0004: // You can contact Mario A. Valdez-Ramirez
0005: // by email at mario@mariovaldez.org or paper mail at
0006: // Olmos 809, San Nicolas, NL. 66495, Mexico.
0007:
0008: // This program is free software; you can redistribute it and/or modify
0009: // it under the terms of the GNU General Public License as published by
0010: // the Free Software Foundation; either version 2 of the License, or (at
0011: // your option) any later version.
0012:
0013: // This program is distributed in the hope that it will be useful, but
0014: // WITHOUT ANY WARRANTY; without even the implied warranty of
0015: // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
0016: // General Public License for more details.
0017:
0018: // You should have received a copy of the GNU General Public License
0019: // along with this program; if not, write to the Free Software
0020: // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
0021:
0022:
0023: // ==================================
0024: // Start of configuration options...
0025: // ==================================
0026: $opm_images_directory = "images/";
0027: $opm_enable_logfile = false;
0028: $opm_enable_extralog = false;
0029: $opm_debug_file = "opm_debug.txt";
0030: $opm_browser_debug = false;
0031: $opm_enable_auth = true;
0032: $opm_password_override = "";
0033: $opm_upload_perms = "0644";
0034: $opm_timezone_shift = 0;
0035: $opm_allow_compression = true;
0036: $opm_compress_level = 1;
0037:
0038: $opm_cfg_useproxy = false;
0039: $opm_cfg_proxyaddress = "192.168.0.1";
0040: $opm_cfg_proxyport = 3128;
0041:
0042: // ==================================
0043: // End of configuration options...
0044: // ==================================
0045:
0046:
0047: $opm_httpconn_timeout = 60; // 60 seconds
0048: $opm_tag_recordbegin = "BR"; // BR
0049: $opm_tag_recordend = "ER"; // ER
0050: $opm_tag_field = "DF"; // DF
0051: $opm_tag_databegin = "["; // [
0052: $opm_tag_dataend = "]"; // ]
0053: $opm_tag_comment = "#"; // #
0054: $opm_tag_stats = "ST"; // ST
0055: $opm_tag_fieldlist = "FL"; // FL
0056:
0057: $opm_session_string = "OSCPMCHECKER";
0058: $opm_max_failedlogins = 8; // Max logins before blocking the client.
0059: $opm_max_blocktime = 3600; // Time a client is blocked after too many failures.
0060: $opm_max_tracktime = 900; // Time to store the login story of each client.
0061: $opm_sleep_afterfail = 15; // Delay when login fails.
0062:
0063:
0064: $opm_script_version = "0.8.9";
0065: error_reporting(E_ALL & ~E_NOTICE);
0066:
0067: $opm_realpath = str_replace (basename (__FILE__), "", __FILE__) . $opm_images_directory;
0068: $opm_tmpsoftwarename = explode (" ", $HTTP_SERVER_VARS["SERVER_SOFTWARE"]);
0069: $opm_tmposname = explode (" ", php_uname ());
0070: $opm_useragent = "User-Agent: OSCPMWin/$opm_script_version " . $opm_tmpsoftwarename[0] . " MySQL/unknown " . $opm_tmposname[0];
0071:
0072: @set_time_limit (300);
0073:
0074: if (!$opm_upload_perms) {
0075: $opm_upload_perms = "0600";
0076: }
0077:
0078: $opm_ip_address = $_SERVER["REMOTE_ADDR"];
0079: if (!$opm_ip_address) {
0080: $opm_ip_address = $HTTP_SERVER_VARS["REMOTE_ADDR"];
0081: if (!$opm_ip_address) {
0082: $opm_ip_address = $_ENV["REMOTE_ADDR"];
0083: if (!$opm_ip_address) {
0084: $opm_ip_address = getenv("REMOTE_ADDR");
0085: }
0086: else $opm_ip_address = "";
0087: }
0088: }
0089:
0090:
0091:
0092: // Get all parameters about the request.
0093: if (!$opm_browser_debug) {
0094: $opm_passwordhash = strtoupper (trim ($_POST["Pw"]));
0095: $opm_operation = strtolower (trim ($_POST["Op"]));
0096: $opm_filename = str_replace (" ", "_", str_replace ("..", "", str_replace ("\\", "", str_replace ("//", "/", trim ($_POST["Fn"])))));
0097: $opm_subdir = str_replace (" ", "_", str_replace ("..", "", str_replace ("\\", "", str_replace ("//", "/", trim ($_POST["SD"])))));
0098: $opm_query = base64_decode (trim ($_POST["Qy"]));
0099: $opm_reqversion = trim ($_POST["Vn"]);
0100: $opm_logintimestamp = trim ($_POST["TS"]);
0101: $opm_compress = abs ($_POST["Gz"]);
0102: }
0103: else {
0104: $opm_passwordhash = strtoupper (trim ($_GET["Pw"]));
0105: $opm_operation = strtolower (trim ($_GET["Op"]));
0106: $opm_filename = str_replace (" ", "_", str_replace ("..", "", str_replace ("\\", "", str_replace ("//", "/", trim ($_GET["Fn"])))));
0107: $opm_subdir = str_replace (" ", "_", str_replace ("..", "", str_replace ("\\", "", str_replace ("//", "/", trim ($_GET["SD"])))));
0108: $opm_query = trim ($_GET["Qy"]);
0109: $opm_reqversion = trim ($_GET["Vn"]);
0110: $opm_logintimestamp = trim ($_GET["TS"]);
0111: $opm_compress = abs ($_GET["Gz"]);
0112: }
0113: if (($opm_filename{0} == "/") || ($opm_filename{0} == ".")) {
0114: $opm_filename = substr ($opm_filename, 1, strlen ($opm_filename) - 1);
0115: }
0116: $opm_compress = ($opm_compress && $opm_allow_compression);
0117: /*
0118: Note on parameters:
0119: When the operation needs a parameter, it shold be send using
0120: either FN or QY (Filename or Query). The difference is that
0121: FN is cleaned (deleting slashes, dots and spaces) while QY
0122: is not cleaned. However, QY is always Base64-encoded.
0123: */
0124:
0125:
0126: // Log basic information about the request.
0127: if ($opm_enable_extralog) {
0128: if (!$opm_browser_debug) {
0129: opm_FNDebug_Log (print_r ($_POST, true));
0130: }
0131: else {
0132: opm_FNDebug_Log (print_r ($_GET, true));
0133: }
0134: }
0135: else {
0136: opm_FNDebug_Log ("");
0137: }
0138: opm_FNDebug_Log ("REALPATH=" . $opm_realpath);
0139: opm_FNDebug_Log ("PASSWORDHASH=" . $opm_passwordhash);
0140: opm_FNDebug_Log ("OPERATION=" . $opm_operation);
0141: opm_FNDebug_Log ("FILENAME=" . $opm_filename);
0142: opm_FNDebug_Log ("SUBDIR=" . $opm_subdir);
0143: opm_FNDebug_Log ("QUERY=" . $opm_query);
0144: opm_FNDebug_Log ("REQVERSION=" . $opm_reqversion);
0145: opm_FNDebug_Log ("LOGINTIMESTAMP=" . $opm_logintimestamp);
0146: opm_FNDebug_Log ("COMPRESS=" . $opm_compress);
0147:
0148:
0149: // Include osCommerce database configuration and functions.
0150: require ("includes/configure.php");
0151: require (DIR_WS_INCLUDES . "database_tables.php");
0152: require (DIR_WS_FUNCTIONS . "database.php");
0153:
0154:
0155: if ($opm_browser_debug) { echo "<pre>"; }
0156:
0157: // Check if script version is the expected by client.
0158: if (($opm_script_version != $opm_reqversion) && ($opm_operation)) {
0159: opm_FNDebug_Log ("ERROR 1000 wrong script version. Expected $opm_reqversion, but we are $opm_script_version.");
0160: echo "ERROR 1000 WRONG SCRIPT VERSION";
0161: return;
0162: }
0163:
0164: // Check if the image directory is valid.
0165: if (!is_dir ($opm_realpath) && ($opm_operation)) {
0166: opm_FNDebug_Log ("ERROR 1010 cannot find the images directory. Expecting $opm_realpath exist.");
0167: echo "ERROR 1010 IMAGE DIRECTORY NOT FOUND";
0168: return;
0169: }
0170:
0171:
0172: // Connect to database.
0173: if (!tep_db_connect ()) {
0174: echo "ERROR 1031 NO DATABASE CONNECTION";
0175: return;
0176: }
0177:
0178:
0179: // Get osCommerce DB password and compare it with client password.
0180: // Unless no operation is requested.
0181: if ($opm_operation) {
0182: if ($opm_enable_auth) {
0183: if (defined ("DB_SERVER_PASSWORD") || ($opm_password_override != "")) {
0184: // Check if the client is known...
0185: $opm_failed_attempts = 0;
0186: $opm_failed_time = time ();
0187: $opm_sql_result = tep_db_query ("select customer_id, full_name, session_id, ip_address, time_entry, time_last_click, last_page_url from " . TABLE_WHOS_ONLINE . " where customer_id=0 and session_id='$opm_session_string' and ip_address='$opm_ip_address'");
0188: if ($opm_sql_record = tep_db_fetch_array ($opm_sql_result)) {
0189: // It is known...
0190: if (round (abs ($opm_sql_record["time_last_click"])) > ($opm_failed_time - $opm_max_tracktime)) {
0191: $opm_failed_attempts = round (abs ($opm_sql_record["last_page_url"]));
0192: if ($opm_failed_attempts > $opm_max_failedlogins) {
0193: // It is blocked...
0194: $opm_failed_time = time () + $opm_max_blocktime;
0195: }
0196: }
0197: else {
0198: // We are not tracking it...
0199: $opm_failed_attempts = 0;
0200: }
0201: // Updates the tracking information...
0202: $opm_sql_result = tep_db_query ("update " . TABLE_WHOS_ONLINE . " set time_last_click='$opm_failed_time' where customer_id=0 and session_id='$opm_session_string' and ip_address='$opm_ip_address'");
0203: }
0204: else {
0205: // Creates a tracking record...
0206: $opm_sql_result = tep_db_query ("insert into " . TABLE_WHOS_ONLINE . " (customer_id, full_name, session_id, ip_address, time_entry, time_last_click, last_page_url) values (0, '$opm_session_string', '$opm_session_string', '$opm_ip_address', '$opm_failed_time', '$opm_failed_time', '0')");
0207: }
0208: if ($opm_failed_attempts > $opm_max_failedlogins) {
0209: // The client is blocked, show error...
0210: opm_FNDebug_Log ("ERROR 1024 the client ($opm_ip_address) has been blocked, too many failed logins ($opm_failed_attempts).");
0211: sleep ($opm_sleep_afterfail);
0212: echo "ERROR 1024 BLOCKED";
0213: return;
0214: }
0215: else {
0216: // The client is not blocked, continue...
0217: if ($opm_password_override != "") {
0218: opm_FNDebug_Log ("Password override is enabled.");
0219: $opm_serverpassword = strtoupper (md5 ($opm_logintimestamp . $opm_password_override));
0220: }
0221: else {
0222: $opm_serverpassword = strtoupper (md5 ($opm_logintimestamp . DB_SERVER_PASSWORD));
0223: }
0224: opm_FNDebug_Log ("SERVERPASSWORDHASH=" . $opm_serverpassword);
0225: if ($opm_serverpassword != $opm_passwordhash) {
0226: // Password mismatch...
0227: opm_FNDebug_Log ("ERROR 1020 the server and client passwords do not match.");
0228: $opm_failed_attempts++;
0229: opm_FNDebug_Log ("Failed logins from $opm_ip_address = $opm_failed_attempts");
0230: // Update tracking data about this...
0231: $opm_sql_result = tep_db_query ("update " . TABLE_WHOS_ONLINE . " set time_last_click='$opm_failed_time', last_page_url='$opm_failed_attempts' where customer_id=0 and session_id='$opm_session_string' and ip_address='$opm_ip_address'");
0232: if ($opm_failed_attempts > 1) {
0233: // This is not the first failure, delay a bit...
0234: sleep ($opm_sleep_afterfail);
0235: }
0236: echo "ERROR 1020 PASSWORD MISMATCH";
0237: return;
0238: }
0239: else {
0240: // Password match, reset failures count in tracking data...
0241: $opm_sql_result = tep_db_query ("update " . TABLE_WHOS_ONLINE . " set time_last_click='$opm_failed_time', last_page_url='0' where customer_id=0 and session_id='$opm_session_string' and ip_address='$opm_ip_address'");
0242: }
0243: }
0244: }
0245: else {
0246: opm_FNDebug_Log ("ERROR 1021 the server password was not found.");
0247: echo "ERROR 1021 CANNOT FIND SERVER PASSWORD";
0248: return;
0249: }
0250: }
0251: else {
0252: opm_FNDebug_Log ("Password authentication is disabled.");
0253: }
0254: }
0255: else {
0256: $opm_simpletest_dbok = false;
0257: $opm_simpletest_imgok = false;
0258: echo "<html><head><title>osCommerce Product Manager (OSCPMWin).</title>\n";
0259: echo "<style>\nBODY { font-family: sans-serif; background-color: #FFFFFF; }\n";
0260: echo "LI { padding: 5px; }\n";
0261: echo "H3 { padding: 5px 5px 5px 20px; }\n";
0262: echo "A { color: #0000FF; text-decoration: none; }\n";
0263: echo "A:hover { color: #FF0000; text-decoration: underline; }\n";
0264: echo "DIV { border: solid 2px #000000; margin: 10px 20px 10px 20px; }";
0265: echo ".ok { background-color: #CCFFCC; }\n";
0266: echo ".notok { background-color: #FFCCCC; }\n";
0267: echo ".info { background-color: #EEEEFF; }\n";
0268: echo ".links { background-color: #EEEEEE; }\n";
0269: echo "</style>\n";
0270: echo "</head><body>\n";
0271: echo "<h3>osCommerce Product Manager (OSCPMWin),<br>server-side script $opm_script_version</h3>\n";
0272: $opm_simpletest_dbok = (boolean) (tep_db_connect ());
0273: $opm_simpletest_imgok = (boolean) (file_exists ($opm_realpath) && is_readable ($opm_realpath) && is_writable ($opm_realpath) && is_dir ($opm_realpath));
0274: if ($opm_simpletest_dbok && $opm_simpletest_imgok) {
0275: echo "<div class=\"ok\">";
0276: }
0277: else {
0278: echo "<div class=\"notok\">";
0279: }
0280: echo "<ul>\n";
0281: if ($opm_simpletest_dbok) {
0282: echo "<li><strong>Database connection seems OK.</strong></li>\n";
0283: }
0284: else {
0285: echo "<li><strong>Database connection failed.</strong><br><small>Check that the database server is working properly. This should not happen if the web store is working properly.</small></li>\n";
0286: }
0287: if ($opm_simpletest_imgok) {
0288: echo "<li><strong>Image directory seems OK.</strong></li>\n";
0289: }
0290: else {
0291: echo "<li><strong>Image directory not found, not readable or not writable.</strong><br><small>Check the opm_images_directory option in this script, and that this script has permissions to read and write in that directory.</small></li>\n";
0292: }
0293: echo "</ul>";
0294: if ($opm_simpletest_dbok && $opm_simpletest_imgok) {
0295: echo "<h3><strong>Everything seems OK. :)</strong></h3>\n";
0296: }
0297: else {
0298: echo "<h3><strong>There seems to be a problem. :(</strong></h3>\n";
0299: }
0300: echo "</div>";
0301: echo "<div class=\"info\"><ul>";
0302: if ($opm_browser_debug) {
0303: echo "<li>Browser-debug mode is enabled.";
0304: }
0305: else {
0306: echo "<li>Browser-debug mode is disabled";
0307: }
0308: echo "<br><small>This is for developers only. To be used only if you are debugging this script or the client application.</small></li>\n";
0309:
0310: if ($opm_enable_logfile) {
0311: echo "<li>Logging file is enabled.";
0312: }
0313: else {
0314: echo "<li>Logging file is disabled";
0315: }
0316: echo "<br><small>For debugging purposes only, not for production stores (because if enabled, slows the server down and consumes too much disk space).</small></li>\n";
0317:
0318: if ($opm_cfg_useproxy) {
0319: echo "<li>Proxy-usage is enabled.";
0320: }
0321: else {
0322: echo "<li>Proxy-usage is disabled";
0323: }
0324: echo "<br><small>To be used if the web server is behind a proxy so that all http connections are done thru the proxy.</small></li>\n";
0325:
0326: if ($opm_allow_compression) {
0327: echo "<li>Compression is enabled.";
0328: }
0329: else {
0330: echo "<li>Compression is disabled";
0331: }
0332: echo "<br><small>Compression of data traffic improves the speed of the data transfer. The compression level is set to $opm_compress_level. This setting is not enforced unless the client application request a compressed data stream too.</small></li>\n";
0333:
0334: echo "<li>The time zone shift is set to $opm_timezone_shift.<br><small>To be used with some timestamps</small>.</li>\n";
0335: echo "</ul></div>";
0336: echo "<div class=\"links\"><ul>";
0337: echo "<li><a href=\"http://www.mariovaldez.net/software/oscpmwin/\">OSCPMWin homepage</a>.</li>\n";
0338: echo "<li><a href=\"http://www.mariovaldez.net/webapps/forums/index.php?c=9\">OSCPMWin web forums</a>.</li>\n";
0339: echo "<li><a href=\"http://www.oscommerce.org/\">osCommerce homepage</a>.</li>\n";
0340: echo "</ul></div>";
0341: echo "<p><small>©2003-2007 by Mario A. Valdez-Ramirez.<br>\n";
0342: echo "This program is free software; you can redistribute it and/or modify\n";
0343: echo "it under the terms of the GNU General Public License as published by\n";
0344: echo "the Free Software Foundation; either version 2 of the License, or (at\n";
0345: echo "your option) any later version.</small></p>\n";
0346: echo "</body></html>";
0347: return;
0348: }
0349:
0350:
0351:
0352: // ==================================
0353: // Do nothing.
0354: // NOOP do nothing.
0355: // ==================================
0356: if ($opm_operation == "noop") {
0357: echo "OK NOOP START\n";
0358: opm_FNDebug_Log ("OK NOOP requested.");
0359: echo "OK NOOP END\n";
0360: }
0361:
0362: // ==================================
0363: // Returns a PHPINFO dump.
0364: // PHPINFO returns a dump of PHPINFO function.
0365: // ==================================
0366: if ($opm_operation == "phpinfo") {
0367: echo "OK PHPINFO START\n";
0368: ob_start ();
0369: phpinfo ();
0370: $opm_phpinfo = ob_get_contents ();
0371: ob_end_clean ();
0372: $opm_phpinfo = str_replace ("<h2>", str_repeat ("=", 40) . "\n* ", $opm_phpinfo);
0373: $opm_phpinfo = str_replace ("</h2>", "\n" . str_repeat ("=", 40) . "\n", $opm_phpinfo);
0374: $opm_phpinfo = str_replace ("<th>", " | ", $opm_phpinfo);
0375: $opm_phpinfo = str_replace ("</th>", " | ", $opm_phpinfo);
0376: $opm_phpinfo = str_replace ("<td class=\"v\">", " | ", $opm_phpinfo);
0377: $opm_phpinfo = strip_tags ($opm_phpinfo);
0378: $opm_phpinfo_lines = explode ("\n", $opm_phpinfo);
0379: $opm_phpinfo = "";
0380: foreach ($opm_phpinfo_lines as $opm_phpinfo_curline) {
0381: $opm_phpinfo_curline = trim ($opm_phpinfo_curline);
0382: if ($opm_phpinfo_curline) {
0383: $opm_phpinfo .= $opm_phpinfo_curline . "\n";
0384: }
0385: }
0386: echo $opm_phpinfo;
0387: echo "OK PHPINFO END\n";
0388: }
0389:
0390: // ==================================
0391: // CHECK if a file exists.
0392: // CHECK requires the full path of the image.
0393: // ==================================
0394: if ($opm_operation == "check") {
0395: if ($opm_filename) {
0396: if (file_exists ($opm_realpath . $opm_filename)) {
0397: opm_FNDebug_Log ("OK file found $opm_filename.");
0398: echo "OK FILE EXISTS";
0399: }
0400: else {
0401: opm_FNDebug_Log ("ERROR 1110 file not found $opm_filename.");
0402: echo "ERROR 1110 FILE NOT FOUND";
0403: }
0404: }
0405: }
0406:
0407: // ==================================
0408: // LIST all files recursively.
0409: // LIST returns the filenames with paths.
0410: // ==================================
0411: if ($opm_operation == "list") {
0412: echo "OK LIST START\n";
0413: opm_FNList_Files ($opm_realpath, "", false);
0414: echo "OK LIST END\n";
0415: }
0416:
0417: // ==================================
0418: // LISTDIRS only dirs recursively.
0419: // LISTDIRS returns no filenames.
0420: // ==================================
0421: if ($opm_operation == "listdirs") {
0422: echo "OK LISTDIRS START\n";
0423: opm_FNList_Files ($opm_realpath, "", true);
0424: echo "OK LISTDIRS END\n";
0425: }
0426:
0427: // ==================================
0428: // DELETE an image.
0429: // DELETE requires the filename of the image with path.
0430: // DELETE1 deletes the image if less than one record references it.
0431: // DELETE2 deletes the image if less than two records reference it.
0432: // ==================================
0433: if (($opm_operation == "delete1") || ($opm_operation == "delete2")) {
0434: if ($opm_operation == "delete1") {
0435: $allowed_owners = 1;
0436: }
0437: else {
0438: $allowed_owners = 2;
0439: }
0440: if ($opm_filename) {
0441: // Check for More Pics 6 extension...
0442: $opm_sqlresult = explode ("\n", opm_FNExec_Query ("describe " . TABLE_PRODUCTS . " products_subimage6"));
0443: if ($opm_sqlresult[0]) {
0444: $opm_sqlresult = explode ("\n", opm_FNExec_Query ("select count(products_id) from " . TABLE_PRODUCTS . " where products_image='$opm_filename' or products_subimage1='$opm_filename' or products_subimage2='$opm_filename' or products_subimage3='$opm_filename' or products_subimage4='$opm_filename' or products_subimage5='$opm_filename' or products_subimage6='$opm_filename'"));
0445: }
0446: else {
0447: $opm_sqlresult = explode ("\n", opm_FNExec_Query ("select count(products_id) from " . TABLE_PRODUCTS . " where products_image='$opm_filename'"));
0448: }
0449: if ($opm_sqlresult[0] < $allowed_owners) {
0450: if (file_exists ($opm_realpath . $opm_filename)) {
0451: if (@unlink ($opm_realpath . $opm_filename)) {
0452: if (!file_exists ($opm_realpath . $opm_filename)) {
0453: opm_FNDebug_Log ("OK file deleted $opm_filename.");
0454: echo "OK DELETE";
0455: }
0456: else {
0457: opm_FNDebug_Log ("ERROR 1120 file cannot be deleted $opm_filename.");
0458: echo "ERROR 1120 DELETE FILE REMAINS";
0459: }
0460: }
0461: else {
0462: opm_FNDebug_Log ("ERROR 1121 when deleting $opm_filename.");
0463: echo "ERROR 1121 DELETE UNKNOWN";
0464: }
0465: }
0466: else {
0467: opm_FNDebug_Log ("OK file not found when deleting $opm_filename.");
0468: echo "OK DELETE FILE NOT FOUND";
0469: }
0470: }
0471: else {
0472: opm_FNDebug_Log ("OK file is used by other record (" . ($opm_sqlresult[0] - 1) . ").");
0473: echo "OK DELETE FILE IN USE";
0474: }
0475: }
0476: else {
0477: opm_FNDebug_Log ("OK filename empty.");
0478: echo "OK DELETE FILENAME EMPTY";
0479: }
0480: }
0481:
0482: // ==================================
0483: // UPLOAD an image.
0484: // UPLOAD requires the path, without filename, where the image will be stored.
0485: // UPLOAD returns the image filename with the path.
0486: // ==================================
0487: if ($opm_operation == "upload") {
0488: if ($_FILES["Fl"]["name"] && $_FILES["Fl"]["size"]) {
0489: if (is_uploaded_file ($_FILES["Fl"]["tmp_name"])) {
0490: if ($opm_filename) {
0491: $newfn = $opm_filename;
0492: }
0493: else {
0494: $newfn = trim ($_FILES["Fl"]["name"]);
0495: }
0496: $newfn = str_replace (" ", "_", $newfn);
0497: $newfn = str_replace ("/", "", $newfn);
0498: $newfn = str_replace ("\\", "", $newfn);
0499: $newfn = ereg_replace("[^[:alnum:]\._]", "", $newfn);
0500: $newfn = strtolower ($newfn);
0501:
0502: if ($opm_subdir) {
0503: if ((!file_exists ($opm_realpath . $opm_subdir)) || (!is_dir ($opm_realpath . $opm_subdir))) {
0504: opm_FNDebug_Log ("will create directory=" . $opm_realpath . $opm_subdir);
0505: opm_FNmkdirs ($opm_realpath . $opm_subdir, 0777);
0506: }
0507: if (file_exists ($opm_realpath . $opm_subdir) && (is_dir ($opm_realpath . $opm_subdir))) {
0508: opm_FNDebug_Log ("directory exists=" . $opm_realpath . $opm_subdir);
0509: $newfn = $opm_subdir . "/" . $newfn;
0510: }
0511: else {
0512: opm_FNDebug_Log ("directory does not exist, will ignore=" . $opm_realpath . $opm_subdir);
0513: }
0514: }
0515: opm_FNDebug_Log ("wanted filename=" . $newfn);
0516: $newfn = opm_FNSmart_Rename ($newfn, 100);
0517: opm_FNDebug_Log ("smart filename=" . $newfn);
0518: opm_FNDebug_Log ("REALPATH=" . $opm_realpath);
0519: if (!file_exists ($opm_realpath . $newfn)) {
0520: opm_FNDebug_Log ("file not exist=" . $opm_realpath . $newfn);
0521: if (@move_uploaded_file ($_FILES["Fl"]["tmp_name"], $opm_realpath . $newfn)) {
0522: opm_FNDebug_Log ("moving file to=" . $opm_realpath . $newfn);
0523: if (file_exists ($opm_realpath . $newfn)) {
0524: opm_FNDebug_Log ("upload complete=" . $opm_realpath . $newfn);
0525: @chmod ($opm_realpath . $newfn, octdec ($opm_upload_perms));
0526: echo "OK UPLOAD [" . $newfn . "]";
0527: }
0528: else {
0529: opm_FNDebug_Log ("ERROR 1130 file not copied=" . $opm_realpath . $newfn);
0530: echo "ERROR 1130 UPLOAD FILE NOT FOUND";
0531: }
0532: }
0533: else {
0534: opm_FNDebug_Log ("ERROR 1131 file not copied=" . $opm_realpath . $newfn);
0535: echo "ERROR 1131 UPLOAD CANNOT MOVE";
0536: }
0537: }
0538: else {
0539: opm_FNDebug_Log ("ERROR 1133 file exist=" . $opm_realpath . $newfn);
0540: echo "ERROR 1133 UPLOAD EXIST [" . $newfn . "]";
0541: }
0542: }
0543: else {
0544: opm_FNDebug_Log ("ERROR 1134 cannot find uploaded file!");
0545: echo "ERROR 1134 UPLOAD";
0546: }
0547: }
0548: }
0549:
0550: // ==================================
0551: // CAPABILITY listing.
0552: // CAPABILITY returns a list of identified modules.
0553: // ==================================
0554: if ($opm_operation == "capa") {
0555: opm_FNDebug_Log ("OK Capability search started.");
0556: echo "OK CAPABILITY START\n";
0557:
0558: // Credit Card Payment...
0559: $opm_sqlresult = explode ("\n", opm_FNExec_Query ("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_PAYMENT_CC_STATUS'"));
0560: if ($opm_sqlresult[0]) {
0561: opm_FNDebug_Log ("OK PAY_CC capcbility found.");
0562: echo "PAY_CC\n";
0563: }
0564:
0565: // Money Order Payment...
0566: $opm_sqlresult = explode ("\n", opm_FNExec_Query ("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_PAYMENT_MONEYORDER_STATUS'"));
0567: if ($opm_sqlresult[0]) {
0568: opm_FNDebug_Log ("OK PAY_ORDER capcbility found.");
0569: echo "PAY_ORDER\n";
0570: }
0571:
0572: // COD Payment...
0573: $opm_sqlresult = explode ("\n", opm_FNExec_Query ("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_PAYMENT_COD_STATUS'"));
0574: if ($opm_sqlresult[0]) {
0575: opm_FNDebug_Log ("OK PAY_CC capcbility found.");
0576: echo "PAY_CC\n";
0577: }
0578:
0579: // PayPal Payment...
0580: $opm_sqlresult = explode ("\n", opm_FNExec_Query ("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_PAYMENT_PAYPAL_STATUS'"));
0581: if ($opm_sqlresult[0]) {
0582: opm_FNDebug_Log ("OK PAY_PP capcbility found.");
0583: echo "PAY_PP\n";
0584: }
0585:
0586: // Flat Rate Shipping...
0587: $opm_sqlresult = explode ("\n", opm_FNExec_Query ("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_SHIPPING_FLAT_STATUS'"));
0588: if ($opm_sqlresult[0]) {
0589: opm_FNDebug_Log ("OK SHIP_FLAT capcbility found.");
0590: echo "SHIP_FLAT\n";
0591: }
0592:
0593: // Table Shipping...
0594: $opm_sqlresult = explode ("\n", opm_FNExec_Query ("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_SHIPPING_TABLE_STATUS'"));
0595: if ($opm_sqlresult[0]) {
0596: opm_FNDebug_Log ("OK SHIP_TBL capcbility found.");
0597: echo "SHIP_TBL\n";
0598: }
0599:
0600: // Store PickUp Shipping...
0601: $opm_sqlresult = explode ("\n", opm_FNExec_Query ("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_SHIPPING_SPU_STATUS'"));
0602: if ($opm_sqlresult[0]) {
0603: opm_FNDebug_Log ("OK SHIP_SPU capcbility found.");
0604: echo "SHIP_SPU\n";
0605: }
0606:
0607: // Multi Pickup Shipping...
0608: $opm_sqlresult = explode ("\n", opm_FNExec_Query ("show tables like 'stores'"));
0609: if ($opm_sqlresult[0]) {
0610: opm_FNDebug_Log ("OK SHIP_MPU capcbility found.");
0611: echo "SHIP_MPU\n";
0612: }
0613:
0614: // More Pics 6...
0615: $opm_sqlresult = explode ("\n", opm_FNExec_Query ("describe " . TABLE_PRODUCTS . " products_subimage6"));
0616: if ($opm_sqlresult[0]) {
0617: opm_FNDebug_Log ("OK MOREPICS6 capcbility found.");
0618: echo "MOREPICS6\n";
0619: }
0620:
0621: // Total B2B...
0622: $opm_sqlresult = explode ("\n", opm_FNExec_Query ("describe " . TABLE_CUSTOMERS . " customers_groups_id"));
0623: if ($opm_sqlresult[0]) {
0624: opm_FNDebug_Log ("OK TOTALB2B capcbility found.");
0625: echo "TOTALB2B\n";
0626: }
0627:
0628: // Poll Booth...
0629: $opm_sqlresult = explode ("\n", opm_FNExec_Query ("show tables like 'phesis_poll_config'"));
0630: if ($opm_sqlresult[0]) {
0631: opm_FNDebug_Log ("OK POLLBOOTH capcbility found.");
0632: echo "POLLBOOTH\n";
0633: }
0634:
0635: // Header Tags Controller...
0636: $opm_sqlresult = explode ("\n", opm_FNExec_Query ("describe " . TABLE_PRODUCTS_DESCRIPTION . " products_head_keywords_tag"));
0637: if ($opm_sqlresult[0]) {
0638: opm_FNDebug_Log ("OK HEADERTAGS capcbility found.");
0639: echo "HEADERTAGS\n";
0640: }
0641:
0642: opm_FNDebug_Log ("OK Capability search finished.");
0643: echo "OK CAPABILITY END\n";
0644: }
0645:
0646: // ==================================
0647: // BACKUP database.
0648: // BACKUP returns a SQL dump.
0649: // ==================================
0650: if ($opm_operation == "backup") {
0651: opm_FNDebug_Log ("OK Backup of database requested.");
0652: $opm_bak_filename = date ("Ymd_His", mktime(date("H")+$opm_timezone_shift,date("i"),date("s"),date("m"),date("d"),date("Y"))) . ".sql";
0653: opm_FNBackup ($opm_realpath . $opm_bak_filename);
0654: if (file_exists ($opm_realpath . $opm_bak_filename)) {
0655: opm_FNgzip_file ($opm_realpath . $opm_bak_filename, $opm_realpath . $opm_bak_filename . ".gz");
0656: if (file_exists ($opm_realpath . $opm_bak_filename . ".gz")) {
0657: $opm_bak_filesize = filesize ($opm_realpath . $opm_bak_filename . ".gz");
0658: header ("Content-type: application/octet-stream");
0659: header ("Content-disposition: attachement; filename=" . $opm_bak_filename . ".gz");
0660: header("Content-Length: " . $opm_bak_filesize);
0661: header ("Pragma: no-store");
0662: readfile ($opm_realpath . $opm_bak_filename . ".gz");
0663: @unlink ($opm_realpath . $opm_bak_filename . ".gz");
0664: opm_FNDebug_Log ("OK Deleting compressed backup file.");
0665: }
0666: @unlink ($opm_realpath . $opm_bak_filename);
0667: opm_FNDebug_Log ("OK Deleting uncompressed backup file.");
0668: }
0669: else {
0670: opm_FNDebug_Log ("ERROR 1140 Backup file not found.");
0671: }
0672: opm_FNDebug_Log ("OK Backup operation finished.");
0673: }
0674:
0675:
0676: // ==================================
0677: // Get XCHGRATES.
0678: // XCHGRATES returns the exchange rates of currencies.
0679: // ==================================
0680: if ($opm_operation == "xchgrates") {
0681: opm_FNDebug_Log ("OK Starting XCHGRATES operation.");
0682: if ($opm_filename) {
0683: $opm_filename = strtoupper ($opm_filename);
0684: $opm_main_currency = substr ($opm_filename, 0, 3);
0685: $opm_xchange_currencies = str_replace (",", "_", substr ($opm_filename, 4));
0686: if (($opm_main_currency) && ($opm_xchange_currencies)) {
0687: $opm_xchange_page = "http://www.oanda.com/convert/fxdaily?value=1&exch=$opm_main_currency&dest=Get+Table&sel_list=$opm_xchange_currencies&format=CSV&redirected=1";
0688: $opm_page_data = opm_FNget_webpage ($opm_xchange_page);
0689: if ($opm_page_data) {
0690: $opm_page_data = strip_tags ($opm_page_data);
0691: $opm_page_data = preg_replace ("/[\r\n]+[\s\t]*[\r\n]+/", "", $opm_page_data);
0692: $opm_xr_matches = array ();
0693: preg_match_all ("/(.+),(\w{3}),([0-9.]+),([0-9.]+)/i", $opm_page_data, $opm_xr_matches);
0694: echo "OK XCHGRATES START\n";
0695: foreach ($opm_xr_matches[2] as $key => $value) {
0696: echo $opm_xr_matches[2][$key] . "," . $opm_xr_matches[4][$key] . "\n";
0697: }
0698: echo "OK XCHGRATES END\n";
0699: }
0700: else {
0701: opm_FNDebug_Log ("ERROR 1150 The remote server answer is empty or invalid.");
0702: echo "ERROR 1150 XCHGRATES REMOTE SERVER ERROR";
0703: }
0704: }
0705: else {
0706: opm_FNDebug_Log ("ERROR 1151 The specified currency codes are invalid.");
0707: echo "ERROR 1151 XCHGRATES INVALID CURRENCY";
0708: }
0709: }
0710: else {
0711: opm_FNDebug_Log ("ERROR 1152 The no currency codes were specified.");
0712: echo "ERROR 1152 XCHGRATES EMPTY CURRENCY";
0713: }
0714: }
0715:
0716:
0717:
0718: // ==================================
0719: // Execute DBQUERY.
0720: // DBQUERY returns ...
0721: // ==================================
0722: if ($opm_operation == "dbquery") {
0723: opm_FNDebug_Log ("OK Starting DBQUERY operation.");
0724: if ($opm_query) {
0725: echo "OK DBQUERY START\n";
0726: echo opm_FNExec_Query ($opm_query, false, true);
0727: echo "OK DBQUERY END\n";
0728: }
0729: else {
0730: opm_FNDebug_Log ("ERROR 1171 The database query is empty.");
0731: echo "ERROR 1171 DBQUERY EMPTY DATABASE QUERY";
0732: }
0733: opm_FNDebug_Log ("OK Finishing DBQUERY operation.");
0734: }
0735:
0736:
0737:
0738: if ($opm_browser_debug) { echo "</pre>"; }
0739: return;
0740:
0741:
0742: // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0743: // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0744: function opm_FNList_Files ($dirname, $parentdir, $onlydirs) {
0745: $dirhandle = opendir ($dirname);
0746: while (($file = readdir ($dirhandle)) != false)
0747: $sorteddir[count ($sorteddir)] = $file;
0748: closedir ($dirhandle);
0749: natcasesort ($sorteddir);
0750: if (!$onlydirs) {
0751: foreach ($sorteddir as $file) {
0752: if (($file != ".") && ($file != "..")) {
0753: if (!is_dir ($dirname . $file)) {
0754: if ($parentdir) {
0755: echo $parentdir . "/" . $file . "\n";
0756: }
0757: else {
0758: echo $file . "\n";
0759: }
0760: }
0761: }
0762: }
0763: foreach ($sorteddir as $file) {
0764: if (($file != ".") && ($file != "..")) {
0765: if (is_dir ($dirname . $file)) {
0766: if ($parentdir) {
0767: opm_FNList_Files ($dirname . $file . "/", $parentdir . "/" . $file, $onlydirs);
0768: }
0769: else {
0770: opm_FNList_Files ($dirname . $file . "/", $file, $onlydirs);
0771: }
0772: }
0773: }
0774: }
0775: }
0776: else {
0777: foreach ($sorteddir as $file) {
0778: if (($file != ".") && ($file != "..")) {
0779: if (is_dir ($dirname . $file)) {
0780: if ($parentdir) {
0781: echo $parentdir . "/" . $file . "\n";
0782: opm_FNList_Files ($dirname . $file . "/", $parentdir . "/" . $file, $onlydirs);
0783: }
0784: else {
0785: echo $file . "\n";
0786: opm_FNList_Files ($dirname . $file . "/", $file, $onlydirs);
0787: }
0788: }
0789: }
0790: }
0791: }
0792: }
0793:
0794:
0795:
0796: // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0797: // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0798: function opm_FNSmart_Rename ($wantedname, $tries) {
0799: global $opm_realpath;
0800: $newname = $wantedname;
0801: $newext = '.' . array_pop (explode ('.', $wantedname));
0802: for ($trycounter = 1; $trycounter <= $tries; $trycounter++) {
0803: if (!file_exists ($opm_realpath . $newname)) {
0804: return ($newname);
0805: }
0806: else {
0807: $newdirname = dirname ($wantedname);
0808: if ($newdirname != ".") {
0809: $newname = dirname ($wantedname) . "/" . basename ($wantedname, $newext) . "_" . $trycounter . $newext;
0810: }
0811: else {
0812: $newname = basename ($wantedname, $newext) . "_" . $trycounter . $newext;
0813: }
0814: }
0815: }
0816: return ($wantedname);
0817: }
0818:
0819:
0820:
0821: // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0822: // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0823: function opm_FNDebug_Log ($logline) {
0824: global $opm_enable_logfile, $opm_debug_file, $opm_timezone_shift;
0825: if ($opm_enable_logfile) {
0826: if (!(file_exists ($opm_debug_file) && !is_writable ($opm_debug_file))) {
0827: $opm_timestamp = date ("Y-m-d H:i:s", mktime(date("H")+$opm_timezone_shift,date("i"),date("s"),date("m"),date("d"),date("Y")));
0828: $opm_lfilef = @fopen ($opm_debug_file, 'a');
0829: if ($opm_lfilef) {
0830: if ($logline) {
0831: @fwrite ($opm_lfilef, $opm_timestamp . ": " . $logline . "\n");
0832: }
0833: else {
0834: @fwrite ($opm_lfilef, "\n");
0835: }
0836: @fclose ($opm_lfilef);
0837: }
0838: }
0839: }
0840: }
0841:
0842:
0843: // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0844: // Based on code posted on php.net by saint@corenova.com and bart@cdasites.com
0845: // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0846: function opm_FNmkdirs ($dirname) {
0847: if (is_dir ($dirname) || empty ($dirname)) return 1;
0848: if (file_exists ($dirname) && !is_dir ($dirname)) return 0;
0849: if (opm_FNmkdirs (substr ($dirname, 0, strrpos ($dirname, '/')))) {
0850: if (!file_exists($dirname)) {
0851: return @mkdir ($dirname, 0777);
0852: }
0853: }
0854: return 0;
0855: }
0856:
0857:
0858: // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0859: // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0860: function opm_FNExec_Query ($sql_query, $rawdata = true, $encodeddata = false) {
0861: global $opm_tag_recordbegin, $opm_tag_recordend, $opm_tag_field, $opm_tag_cfield, $opm_tag_fieldlist;
0862: global $opm_tag_databegin, $opm_tag_dataend, $opm_tag_comment, $opm_tag_stats;
0863: global $opm_compress, $opm_compress_level;
0864: $result_string = "";
0865: $record_count = 0;
0866: $query_type = strtoupper (substr ($sql_query, 0, strpos ($sql_query, " ")));
0867: opm_FNDebug_Log ("SQLQUERY=" . $sql_query);
0868: $sql_result = tep_db_query ($sql_query);
0869: if (($query_type == "SELECT") || ($query_type == "SHOW") || ($query_type == "DESCRIBE")) {
0870: while ($sql_record = tep_db_fetch_array ($sql_result)) {
0871: $record_count++;
0872: $sql_fullrec = "";
0873: if ($rawdata) {
0874: foreach ($sql_record as $key => $value) {
0875: $result_string .= $value . "\n";
0876: }
0877: }
0878: else {
0879: $result_string .= "$opm_tag_recordbegin\n";
0880: foreach ($sql_record as $key => $value) {
0881: if ($encodeddata) {
0882: $encodedfield = base64_encode ($value);
0883: }
0884: else {
0885: $encodedfield = htmlentities ($value);
0886: }
0887: $result_string .= "$opm_tag_field " . $opm_tag_databegin . $encodedfield . $opm_tag_dataend . "\n";
0888: $sql_fullrec .= $encodedfield;
0889: }
0890: $result_string .= "$opm_tag_recordend " . abs (crc32 ($sql_fullrec)) . "\n";
0891: }
0892: }
0893: }
0894: elseif ($query_type == "INSERT") {
0895: $sql_result = tep_db_insert_id ();
0896: $record_count = 1;
0897: $sql_fullrec = "";
0898: if ($rawdata) {
0899: $result_string .= $sql_result . "\n";
0900: }
0901: else {
0902: $result_string .= "$opm_tag_recordbegin\n";
0903: if ($encodeddata) {
0904: $encodedfield = base64_encode ($sql_result);
0905: }
0906: else {
0907: $encodedfield = htmlentities ($sql_result);
0908: }
0909: $result_string .= "$opm_tag_field " . $opm_tag_databegin . $encodedfield . $opm_tag_dataend . "\n";
0910: $sql_fullrec .= $encodedfield;
0911: $result_string .= "$opm_tag_recordend " . abs (crc32 ($sql_fullrec)) . "\n";
0912: }
0913: }
0914: if (!$rawdata) {
0915: if ($opm_compress) {
0916: opm_FNDebug_Log ("RECORDSET SIZE (UNCOMPRESSED)=" . strlen ($result_string));
0917: $result_string = base64_encode (gzcompress ($result_string, $opm_compress_level)) . "\n";
0918: }
0919: }
0920: opm_FNDebug_Log ("RECORDSET SIZE=" . strlen ($result_string));
0921: return $result_string;
0922: }
0923:
0924:
0925:
0926:
0927:
0928: // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0929: // Based on code from osCommerce (/admin/backup.php).
0930: // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0931: function opm_FNBackup ($dump_file) {
0932: global $opm_script_version;
0933: if ($dump_file) {
0934: $bakfilef = fopen ($dump_file, 'w');
0935: $bakline = "# OSCPMWin (server-side $opm_script_version)\n";
0936: $bakline .= "# Database: " . DB_DATABASE . "@" . DB_SERVER . "\n";
0937: $bakline .= "# Date: " . date ("Y-m-d H:i:s", mktime(date("H")+$opm_timezone_shift,date("i"),date("s"),date("m"),date("d"),date("Y"))) . "\n";
0938: fwrite ($bakfilef, $bakline);
0939: $tables_query = tep_db_query ("show tables");
0940: while ($tables = tep_db_fetch_array ($tables_query)) {
0941: list (, $table) = each ($tables);
0942: $bakline = "drop table if exists $table;\ncreate table $table (\n";
0943: $table_list = array ();
0944: $fields_query = tep_db_query ("show fields from $table");
0945: while ($fields = tep_db_fetch_array($fields_query)) {
0946: $table_list[] = $fields["Field"];
0947: $bakline .= " " . $fields["Field"] . " " . $fields["Type"];
0948: if (strlen ($fields["Default"]) > 0) $bakline .= " default '" . $fields["Default"] . "'";
0949: if (strtoupper ($fields["Null"]) != "YES") $bakline .= " not null";
0950: if (isset ($fields["Extra"])) $bakline .= " " . $fields["Extra"];
0951: $bakline .= ",\n";
0952: }
0953: $bakline = ereg_replace(",\n$", '', $bakline);
0954: $index = array ();
0955: $keys_query = tep_db_query ("show keys from $table");
0956: while ($keys = tep_db_fetch_array ($keys_query)) {
0957: $kname = $keys["Key_name"];
0958: if (!isset ($index[$kname])) {
0959: $index[$kname] = array ("unique" => !$keys["Non_unique"], "columns" => array());
0960: }
0961: $index[$kname]["columns"][] = $keys["Column_name"];
0962: }
0963: while (list($kname, $info) = each($index)) {
0964: $bakline .= ",\n";
0965: $columns = implode($info["columns"], ", ");
0966: if ($kname == "PRIMARY") {
0967: $bakline .= " PRIMARY KEY ($columns)";
0968: } elseif ($info["unique"]) {
0969: $bakline .= " UNIQUE $kname ($columns)";
0970: } else {
0971: $bakline .= " KEY $kname ($columns)";
0972: }
0973: }
0974: $bakline .= "\n);\n\n";
0975: fwrite ($bakfilef, $bakline);
0976: $rows_query = tep_db_query ("select " . implode (",", $table_list) . " from $table");
0977: while ($rows = tep_db_fetch_array ($rows_query)) {
0978: $bakline = "insert into $table (" . implode (", ", $table_list) . ") values (";
0979: reset ($table_list);
0980: while (list (, $i) = each ($table_list)) {
0981: if (!isset ($rows[$i])) {
0982: $bakline .= "NULL, ";
0983: } elseif (($rows[$i] != "") && (strtoupper ($rows[$i]) != "NULL")) {
0984: $row = addslashes ($rows[$i]);
0985: $row = ereg_replace("\n#", "\n".'\#', $row);
0986: $bakline .= "'$row', ";
0987: } else {
0988: $bakline .= "'', ";
0989: }
0990: }
0991: $bakline = ereg_replace (", $", "", $bakline) . ");\n";
0992: fwrite ($bakfilef, $bakline);
0993: }
0994: }
0995: fclose ($bakfilef);
0996: }
0997: }
0998:
0999:
1000: // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1001: // Compress a file with the gzip algorithm.
1002: // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1003: function opm_FNgzip_file ($opm_gzsource, $opm_gztarget) {
1004: if (function_exists ("gzwrite") && file_exists ($opm_gzsource)) {
1005: $opm_ungzfp = fopen($opm_gzsource, "rb");
1006: $opm_gzfp = gzopen($opm_gztarget, "wb9");
1007: if ($opm_gzfp && $opm_ungzfp) {
1008: while (!feof ($opm_ungzfp)) {
1009: gzwrite ($opm_gzfp, fread ($opm_ungzfp, 65535));
1010: }
1011: @fclose ($opm_ungzfp);
1012: @gzclose ($opm_gzfp);
1013: return (true);
1014: }
1015: else {
1016: @fclose ($opm_ungzfp);
1017: @gzclose ($opm_gzfp);
1018: return (false);
1019: }
1020: }
1021: else {
1022: return (false);
1023: }
1024: }
1025:
1026:
1027: // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1028: // Request a page from a web server.
1029: // If using a proxy server, redirect the call thru the proxy.
1030: // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1031: function opm_FNget_webpage ($target_url) {
1032: global $opm_useragent, $opm_httpconn_timeout, $opm_cfg_useproxy, $opm_cfg_proxyaddress, $opm_cfg_proxyport;
1033: $opm_http_content = "";
1034: $errno = 0;
1035: $errstr = "";
1036: $urlparts = parse_url ($target_url);
1037: if ($urlparts["host"]) {
1038: @ignore_user_abort (true);
1039: if ($opm_cfg_useproxy) {
1040: $opm_sockconn = @fsockopen ($opm_cfg_proxyaddress, $opm_cfg_proxyport, $errno, $errstr, $opm_httpconn_timeout);
1041: }
1042: else {
1043: $opm_sockconn = @fsockopen ($urlparts["host"], (empty($urlparts["port"]) ? "80" : $urlparts["port"]), $errno, $errstr, $opm_httpconn_timeout);
1044: }
1045: if ($opm_sockconn) {
1046: if ($opm_cfg_useproxy) {
1047: fputs ($opm_sockconn, "GET " . $urlparts["scheme"] . "://" . $urlparts["host"] . $urlparts["path"] . "?" . $urlparts["query"] . " HTTP/1.0\r\nHost: " . $opm_cfg_proxyaddress . "\r\nUser-Agent: $opm_useragent\r\nPragma: no-cache\r\nConnection: Close\r\n\r\n");
1048: }
1049: else {
1050: fputs ($opm_sockconn, "GET " . $urlparts["path"] . "?" . $urlparts["query"] . " HTTP/1.0\r\nHost: " . $urlparts["host"] . "\r\nUser-Agent: $opm_useragent\r\nConnection: Close\r\n\r\n");
1051: }
1052: while ((!feof($opm_sockconn)) && (!is_readable ($opm_skfilename))) {
1053: $opm_http_content .= fgets ($opm_sockconn, 10240);
1054: }
1055: @fclose ($opm_sockconn);
1056: if (eregi ("HTTP.*200 OK", $opm_http_content)) {
1057: $opm_http_content = str_replace ("\r", "", $opm_http_content);
1058: $opm_http_content = substr ($opm_http_content, strpos ($opm_http_content, "\n\n") + 2);
1059: return ($opm_http_content);
1060: }
1061: }
1062: }
1063: return ("");
1064: }
1065:
1066:
1067:
1068:
1069: ?>