123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311 |
- <?php
- if (!defined('ADODB_DIR')) die();
- global $ADODB_INCLUDED_CSV;
- $ADODB_INCLUDED_CSV = 1;
-
- function _rs2serialize(&$rs,$conn=false,$sql='')
- {
- $max = ($rs) ? $rs->FieldCount() : 0;
-
- if ($sql) $sql = urlencode($sql);
-
-
- if ($max <= 0 || $rs->dataProvider == 'empty') {
- if (is_object($conn)) {
- $sql .= ','.$conn->Affected_Rows();
- $sql .= ','.$conn->Insert_ID();
- } else
- $sql .= ',,';
-
- $text = "====-1,0,$sql\n";
- return $text;
- }
- $tt = ($rs->timeCreated) ? $rs->timeCreated : time();
-
-
- $line = "====1,$tt,$sql\n";
-
- if ($rs->databaseType == 'array') {
- $rows =& $rs->_array;
- } else {
- $rows = array();
- while (!$rs->EOF) {
- $rows[] = $rs->fields;
- $rs->MoveNext();
- }
- }
-
- for($i=0; $i < $max; $i++) {
- $o =& $rs->FetchField($i);
- $flds[] = $o;
- }
-
- $savefetch = isset($rs->adodbFetchMode) ? $rs->adodbFetchMode : $rs->fetchMode;
- $class = $rs->connection->arrayClass;
- $rs2 =& new $class();
- $rs2->sql = $rs->sql;
- $rs2->oldProvider = $rs->dataProvider;
- $rs2->InitArrayFields($rows,$flds);
- $rs2->fetchMode = $savefetch;
- return $line.serialize($rs2);
- }
-
- function &csv2rs($url,&$err,$timeout=0, $rsclass='ADORecordSet_array')
- {
- $err = false;
- $fp = @fopen($url,'rb');
- if (!$fp) {
- $err = $url.' file/URL not found';
- return false;
- }
- flock($fp, LOCK_SH);
- $arr = array();
- $ttl = 0;
-
- if ($meta = fgetcsv($fp, 32000, ",")) {
-
- if (strncmp($meta[0],'****',4) === 0) {
- $err = trim(substr($meta[0],4,1024));
- fclose($fp);
- return false;
- }
-
-
-
-
- if (strncmp($meta[0], '====',4) === 0) {
-
- if ($meta[0] == "====-1") {
- if (sizeof($meta) < 5) {
- $err = "Corrupt first line for format -1";
- fclose($fp);
- return false;
- }
- fclose($fp);
-
- if ($timeout > 0) {
- $err = " Illegal Timeout $timeout ";
- return false;
- }
-
- $rs =& new $rsclass($val=true);
- $rs->fields = array();
- $rs->timeCreated = $meta[1];
- $rs->EOF = true;
- $rs->_numOfFields = 0;
- $rs->sql = urldecode($meta[2]);
- $rs->affectedrows = (integer)$meta[3];
- $rs->insertid = $meta[4];
- return $rs;
- }
-
-
-
-
-
-
-
-
- if (sizeof($meta) > 1) {
- if($timeout >0){
- $tdiff = (integer)( $meta[1]+$timeout - time());
- if ($tdiff <= 2) {
- switch($tdiff) {
- case 4:
- case 3:
- if ((rand() & 31) == 0) {
- fclose($fp);
- $err = "Timeout 3";
- return false;
- }
- break;
- case 2:
- if ((rand() & 15) == 0) {
- fclose($fp);
- $err = "Timeout 2";
- return false;
- }
- break;
- case 1:
- if ((rand() & 3) == 0) {
- fclose($fp);
- $err = "Timeout 1";
- return false;
- }
- break;
- default:
- fclose($fp);
- $err = "Timeout 0";
- return false;
- }
-
- }
- }
- $ttl = $meta[1];
- }
-
-
- if ($meta[0] === '====1') {
-
- $MAXSIZE = 128000;
-
- $text = fread($fp,$MAXSIZE);
- if (strlen($text)) {
- while ($txt = fread($fp,$MAXSIZE)) {
- $text .= $txt;
- }
- }
- fclose($fp);
- $rs = unserialize($text);
- if (is_object($rs)) $rs->timeCreated = $ttl;
- else {
- $err = "Unable to unserialize recordset";
-
- }
- return $rs;
- }
-
- $meta = false;
- $meta = fgetcsv($fp, 32000, ",");
- if (!$meta) {
- fclose($fp);
- $err = "Unexpected EOF 1";
- return false;
- }
- }
-
- $flds = array();
- foreach($meta as $o) {
- $o2 = explode(':',$o);
- if (sizeof($o2)!=3) {
- $arr[] = $meta;
- $flds = false;
- break;
- }
- $fld =& new ADOFieldObject();
- $fld->name = urldecode($o2[0]);
- $fld->type = $o2[1];
- $fld->max_length = $o2[2];
- $flds[] = $fld;
- }
- } else {
- fclose($fp);
- $err = "Recordset had unexpected EOF 2";
- return false;
- }
-
-
- $MAXSIZE = 128000;
-
- $text = '';
- while ($txt = fread($fp,$MAXSIZE)) {
- $text .= $txt;
- }
-
- fclose($fp);
- @$arr = unserialize($text);
-
- if (!is_array($arr)) {
- $err = "Recordset had unexpected EOF (in serialized recordset)";
- if (get_magic_quotes_runtime()) $err .= ". Magic Quotes Runtime should be disabled!";
- return false;
- }
- $rs =& new $rsclass();
- $rs->timeCreated = $ttl;
- $rs->InitArrayFields($arr,$flds);
- return $rs;
- }
-
-
- function adodb_write_file($filename, $contents,$debug=false)
- {
-
-
-
-
-
-
-
-
-
-
-
- if (strncmp(PHP_OS,'WIN',3) === 0) {
-
- $mtime = substr(str_replace(' ','_',microtime()),2);
-
- $tmpname = $filename.uniqid($mtime).getmypid();
- if (!($fd = fopen($tmpname,'a'))) return false;
- $ok = ftruncate($fd,0);
- if (!fwrite($fd,$contents)) $ok = false;
- fclose($fd);
- chmod($tmpname,0644);
-
- @unlink($filename);
- if (!@rename($tmpname,$filename)) {
- unlink($tmpname);
- $ok = false;
- }
- if (!$ok) {
- if ($debug) ADOConnection::outp( " Rename $tmpname ".($ok? 'ok' : 'failed'));
- }
- return $ok;
- }
- if (!($fd = fopen($filename, 'a'))) return false;
- if (flock($fd, LOCK_EX) && ftruncate($fd, 0)) {
- $ok = fwrite( $fd, $contents );
- fclose($fd);
- chmod($filename,0644);
- }else {
- fclose($fd);
- if ($debug)ADOConnection::outp( " Failed acquiring lock for $filename<br>\n");
- $ok = false;
- }
-
- return $ok;
- }
- ?>
|