Hi, Thank you for feedback again.
Yes, the BCMath module is not in default configuration if you will compile PHP. In case compilation from sources need to add "--enable-bcmath" to configuration parameters. On some GNU/Linux distributions the BCMath is as default in PHP (Debian, Slackware) and on some distributions the BCMath need to install as a module from package apart from the PHP package (for example Fedora). Regards. gani W dniu 13 marca 2011 21:07 użytkownik Dan Langille <d...@langille.org> napisał: > On 3/12/2011 9:33 PM, ganiuszka wrote: >> >> W dniu 13 marca 2011 01:01 użytkownik Dan Langille<d...@langille.org> >> napisał: >>> >>> On 3/12/2011 9:29 AM, ganiuszka wrote: >>>> >>>> W dniu 11 marca 2011 21:45 użytkownik ganiuszka<ganius...@gmail.com> >>>> napisał: >>>>> >>>>> Hi, >>>>> In my example jobid is putting in: >>>>> ... File.JobId=8... >>>>> but this "eight": >>>>> >>>>> base64_decode_lstat(8,File.LStat) >>>>> >>>>> is exactly eight field (encoded filesize field). I seem that you used >>>>> standard base64 decoder to decode eighth field. Am I right? >>>>> >>>>> Bacula lstat is encoded by using non-standard base64 algorithm. Your >>>>> decoded lstat shows like this: >>>>> >>>>> [dev] => 89 >>>>> [inodes] => 1366434 >>>>> [mode] => 33200 >>>>> [links] => 1 >>>>> [uid] => 80 >>>>> [gid] => 91 >>>>> [rdev] => 5481898 >>>>> [size] => 315 >>>>> [blksize] => 16384 >>>>> [blocks] => 4 >>>>> [atime] => 1299770037 >>>>> [mtime] => 1299770037 >>>>> [ctime] => 1299770066 >>>>> [LinkFl] => 0 >>>>> [flags] => 0 >>>>> [data] => 2 >>>>> >>>>> I do not understand every field, but most fields is clear. Now, I >>>>> wrote implementation of Bacula base64_decoder in PHP. I need finish it >>>>> and make WebGUI for this and I will share this decoder here. For this >>>>> I am using source code of base64 implementation in Bacula and this: >>>>> >>>>> http://old.nabble.com/The-File.LStat-field-td940366.html >>>>> >>>>> Regards. >>>>> gani >>>>> >>>>> 2011/3/11 Dan Langille<d...@langille.org>: >>>>>> >>>>>> On 3/9/2011 5:36 PM, ganiuszka wrote: >>>>>> >>>>>>> 2011/3/9 Mike Eggleston<mikee...@mac.com>: >>>>>>>> >>>>>>>> Afternoon, >>>>>>>> >>>>>>>> I just noticed one of my clients had a huge incremental (level 2) >>>>>>>> backup. I want to see what file caused the huge increase. I tried >>>>>>>> 'list >>>>>>>> files jobid=20097' and though I'm shown the files, I'm not shown the >>>>>>>> size of each file. Is there a command or query that shows me the >>>>>>>> size >>>>>>>> of the file? >>>>>>>> >>>>>>>> Mike >>>>>> >>>>>>> Hi, >>>>>>> Here you have SQL function for PostgreSQL (I took it from bweb): >>>>>>> >>>>>>> CREATE PROCEDURAL LANGUAGE plpgsql; >>>>>>> BEGIN; >>>>>>> >>>>>>> CREATE OR REPLACE FUNCTION base64_decode_lstat(int4, varchar) RETURNS >>>>>>> int8 >>>>>>> AS $$ >>>>>>> DECLARE >>>>>>> val int8; >>>>>>> b64 varchar(64); >>>>>>> size varchar(64); >>>>>>> i int; >>>>>>> BEGIN >>>>>>> size := split_part($2, ' ', $1); >>>>>>> b64 := >>>>>>> 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; >>>>>>> val := 0; >>>>>>> FOR i IN 1..length(size) LOOP >>>>>>> val := val + (strpos(b64, substr(size, i, 1))-1) * >>>>>>> (64^(length(size)-i)); >>>>>>> END LOOP; >>>>>>> RETURN val; >>>>>>> END; >>>>>>> $$ language 'plpgsql'; >>>>>>> >>>>>>> COMMIT; >>>>>>> >>>>>>> and this is a query which lists file path, filename and size in Bytes >>>>>>> (in this example for jobid=8): >>>>>>> >>>>>>> SELECT Path.Path, Filename.Name, base64_decode_lstat(8,File.LStat) AS >>>>>>> size FROM Filename, File, Path WHERE File.JobId=8 AND >>>>>>> File.PathId=Path.PathId AND Filename.FilenameId=File.FilenameId ORDER >>>>>>> BY size ASC; >>>>>>> >>>>>>> I tested it. It works. >>>>>> >>>>>> For the record: >>>>>> >>>>>> In this query, I see base64_decode_lstat(8,File.LStat) >>>>>> >>>>>> What is 8? It is not jobid. It is a field id. This lstat value: >>>>>> >>>>>> BZ FNmi IGw B BQ Bb U6Wq E7 EAA E BNeOq1 BNeOq1 BNeOrS A A C >>>>>> >>>>>> The eight field, as defined by ' ', is E7. >>>>>> >>>>>> -- >>>>>> Dan Langille - http://langille.org/ >>>>>> >>>> >>>> >>>> >>> >>> >>>> Hi, >>>> >>>> I wrote the Bacula LStat decoder implementation in PHP. I made WebGUI >>>> for this also. Now online LStat decoder (beta version) is available on >>>> my page Bacula.pl: >>>> >>>> http://www.bacula.pl/bacula-lstat-decoder/ >>>> >>>> In the near future I need to make description of fields. >>>> >>>> Here is Bacula LStat decoder function in PHP: >>>> >>>> function decode_bacula_lstat($lstat) { >>>> $base64 = >>>> 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; >>>> $lstat = trim($lstat); >>>> $lstat_fields = explode(' ', $lstat); >>>> >>>> if(count($lstat_fields) !== 16) { >>>> die('Error! Number of lstat fields is invalid. Please >>>> make >>>> sure that >>>> it is valid lstat string.'); >>>> } >>>> >>>> list($dev, $inode, $mode, $links, $uid, $gid, $rdev, $size, >>>> $blksize, >>>> $blocks, $atime, $mtime, $ctime, $linkfi, $flags, $data) = >>>> $lstat_fields; >>>> $encoded_values = array('dev' => $dev, 'inode' => $inode, >>>> 'mode' => >>>> $mode, 'links' => $links, 'uid' => $uid, 'gid' => $gid, 'rdev' => >>>> $rdev, 'size' => $size, 'blksize' => $blksize, 'blocks' => $blocks, >>>> 'atime' => $atime, 'mtime' => $mtime, 'ctime' => $ctime, 'linkfi' => >>>> $linkfi, 'flags' => $flags, 'data' => $data); >>>> >>>> $ret = array(); >>>> foreach($encoded_values as $key => $val) { >>>> $result = 0; >>>> $is_minus = false; >>>> $start = 0; >>>> >>>> if(substr($val, 0, 1) === '-') { >>>> $is_minus = true; >>>> $start++; >>>> } >>>> >>>> for($i = $start; $i< strlen($val); $i++) { >>>> $result<<= 6; >>>> $result += strpos($base64, substr($val, $i , >>>> 1)); >>>> } >>>> $ret[$key] = ($is_minus === true) ? -$result : $result; >>>> } >>>> return $ret; >>>> } >>>> >>>> and here is usage for this: >>>> >>>> $lstat = 'gB DL+b IGg B A y A D5dZR BAA fN4 BNeR+z BNeR+7 BNeR+7 A A C'; >>>> $decoded_lstat = decode_bacula_lstat($lstat); >>>> print_r($decoded_lstat); >>>> >>>> Any suggestions and modifications are welcome. >>>> Regards >>>> gani >>>> >>> >>> I tried this function. I got an interesting value for: >>> >>> Bn bIgF IGk B Pp Pp BsZ/o Cp7/ZH EAA VQLA BNachF BNacW5 BNachH A A C >>> >>> The PHP function returns: -1443891641 >>> >>> The pgsql function returns: >>> >>> bacula=# select base64_decode_lstat(8,'Bn bIgF IGk B Pp Pp BsZ/o Cp7/ZH >>> EAA >>> VQLA BNachF BNacW5 BNachH A A C') >>> bacula-# ; >>> base64_decode_lstat >>> --------------------- >>> 2851075655 >>> (1 row) >>> >>> bacula=# >>> >>> Which is a more likely value.... FYI. > >> Hi, >> >> First, many thanks for your feedback. >> >> I researched that behaviour with filesize of your lstat field ( >> -1443891641). Yes, I made mistake with using shift bitwise operator. >> From PHP documentation: >> >> "Warning! >> Don't right shift for more than 32 bits on 32 bits systems. Don't left >> shift in case it results to number longer than 32 bits." >> (source: http://php.net/manual/en/language.operators.bitwise.php) >> >> Repairing this bug is replacing the line: >> >> $result <<= 6; >> >> to this line: >> >> $result = bcmul($result, bcpow(2,6)); >> >> It should work properly. > > bcmul isn't in PHP by default: > > PHP Fatal error: Call to undefined function bcmul() > > I'm running PHP php5-5.3.5 > > The man page: http://us2.php.net/bcmul > > I recompiled PHP with BCMATH - bc style precision math functions > > That's much better. Thanks. > > What I'd like to do, but not today, is compare all values output by the PHP > function with the values output by the stored procedure. > > > -- > Dan Langille - http://langille.org/ > -- "Większej miłości nikt nie ma nad tę, jak gdy kto życie swoje kładzie za przyjaciół swoich." Jezus Chrystus ------------------------------------------------------------------------------ Colocation vs. Managed Hosting A question and answer guide to determining the best fit for your organization - today and in the future. http://p.sf.net/sfu/internap-sfd2d _______________________________________________ Bacula-users mailing list Bacula-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bacula-users