Andy-H Posted October 20, 2011 Share Posted October 20, 2011 Hi, I am trying to recreate the UNIX file permissions to test weather today is in a list of days of the week in which a trigger should be active, I have a table storing an integer value for the days active and am comparing that with the weekday number, however the results are not as I expect, where am I going wrong? // days_active = (32+64) = 96 = Saturday & Sunday || ( 6 & 7) SELECT * FROM `triggers` WHERE IF(DATE_FORMAT(NOW(), '%w')=0,7,DATE_FORMAT(NOW(), '%u')) & days_active Link to comment https://forums.phpfreaks.com/topic/249449-recreate-unix-file-permissions/ Share on other sites More sharing options...
trq Posted October 20, 2011 Share Posted October 20, 2011 Pardon? Link to comment https://forums.phpfreaks.com/topic/249449-recreate-unix-file-permissions/#findComment-1280784 Share on other sites More sharing options...
Andy-H Posted October 20, 2011 Author Share Posted October 20, 2011 I think I've got it worked out, I just need to convert 1 to 1 2 to 2 3 to 4 4 to 8 5 to 16 6 to 32 7 to 64 So I can use a bitwise comparison and check for say monday to friday the number to check against would be 1 + 2 + 4 + 8 + 16 = 31 So 1 & 31 = true 2 & 31 = true 4 & 31 = true 8 & 31 = true 16 & 31 = true 32 & 31 = false 64 & 31 = false Is there a function to make this conversion in MySQL? Link to comment https://forums.phpfreaks.com/topic/249449-recreate-unix-file-permissions/#findComment-1280787 Share on other sites More sharing options...
Andy-H Posted October 20, 2011 Author Share Posted October 20, 2011 Sorry, as you may have noticed I'm finding it hard to explain what I am trying to do, perhaps this will help, $test = array(1=>1, 2=>2, 3=>4, 4=>8, 5=>16, 6=>32, 7=>64); for( $i = 1; $i <= 7; $i++) { echo ($test[$i] & 13) . '<br >'; // 13 = 1 + 4 + 8 ( Mon, Wed, Thu) } Outputs: 1 // true 0 // false 4 // true 8 // true 0 // false 0 // false 0 // false [/size]So now all I need is a better way to convert 1 to1, 2 to 2, 3 to 4, 5 to 8 etc. than a load of IF() statements. Any idea? Link to comment https://forums.phpfreaks.com/topic/249449-recreate-unix-file-permissions/#findComment-1280794 Share on other sites More sharing options...
fenway Posted October 20, 2011 Share Posted October 20, 2011 I have no idea what you're talking about -- but it doesn' sounds like mysql. Link to comment https://forums.phpfreaks.com/topic/249449-recreate-unix-file-permissions/#findComment-1280803 Share on other sites More sharing options...
Andy-H Posted October 20, 2011 Author Share Posted October 20, 2011 Got it sorted, SELECT * FROM `triggers` WHERE POW(2, IF(DATE_FORMAT(NOW(), '%w')=0,7,DATE_FORMAT(NOW(), '%w'))-1) & days_active Link to comment https://forums.phpfreaks.com/topic/249449-recreate-unix-file-permissions/#findComment-1280807 Share on other sites More sharing options...
Andy-H Posted October 20, 2011 Author Share Posted October 20, 2011 Ok I'm home now and can explain what I was trying to do, basically, given a set of weekdays on which a data rule should be in place, and a date to compare against them, I needed to extract the weekday and determine if a datarule was active. I read a reply a while ago on here that explained how unix file permissions worked, and thought the implementation would be perfect for this scenario. So to do it I wrote this script: function pow2(&$value) { $value = pow(2, $value); // set $value to 2 to the exponent (power) of $value } if ( !empty($_POST['days']) ) { array_map($_POST['days'], 'pow2'); $checkdays = array_sum($_POST['days']); echo '<pre>'. print_r($_POST['days'],1) .'</pre>'. $checkdays; } <form action="" method="post"> <input type="checkbox" name="days[]" value="0" >Mon <br > <input type="checkbox" name="days[]" value="1" >Tue <br > <input type="checkbox" name="days[]" value="2" >Wed <br > <input type="checkbox" name="days[]" value="3" >Thu <br > <input type="checkbox" name="days[]" value="4" >Fri <br > <input type="checkbox" name="days[]" value="5" >Sat <br > <input type="checkbox" name="days[]" value="6" >Sun <br > <input type="submit" > </form> So if you were to check Mon, Wed and Thu you would get Mon ( 2 ^ 0 ) = 1 Wed ( 2 ^ 2 ) = 4 Thu ( 2 ^ 3 ) = 8 = 13 So I would set rule_checkdays to 13, now given a date I need to work out the day and use that as the exponent on 2. (I will use NOW() to replace my date field for this example) So: IF(DATE_FORMAT(NOW(), '%w')=0,7,DATE_FORMAT(NOW(), '%w')) - 1 // Mon = 0, Tue = 1, Wed = 2, Thu = 3, Fri = 4, Sat = 5, Sun = 6 POW(2, IF(DATE_FORMAT(NOW(), '%w')=0,7,DATE_FORMAT(NOW(), '%w'))-1) // Mon = 1, Tue = 2, Wed = 4, Thu = 8, Fri = 16, Sat = 32, Sun = 64 So today is Thu so the above would return 8, which represented by binary is: 00001000 And 13 is 00001101 So with a bitwise & 00001101 (13) & 00001000 ( = 00001000 ( (bool[true]) Now if today were Fri ( 16 ) that would equate to: 00001101 (13) & 00010000 (16) = 00000000 (0)(bool[false]) Or Tue ( 2 ) 00001101 (13) & 00000010 ( 2) = 00000000 ( 0)(bool[false]) So now, POW(2, IF(DATE_FORMAT(NOW(), '%w')=0,7,DATE_FORMAT(NOW(), '%w'))-1) & days_active Will result to true if a rule is active today, false if not. Simple as that lol Link to comment https://forums.phpfreaks.com/topic/249449-recreate-unix-file-permissions/#findComment-1280899 Share on other sites More sharing options...
Andy-H Posted October 20, 2011 Author Share Posted October 20, 2011 Read = 1 Write = 2 Ecexcute = 4 Owner = Read & Write & Execute ( 1 + 2 + 4 ) (7) Group = Write & Execute ( 1 + 4 ) (5) All = Read ( 1 ) (1) then something like 7 = 0111 3 = 0011 1 = 0001 //owner [7] if ( $action == 'r' ) { if ( $premissions & 1 ) { // 7 = 00000111 & // 1 = 00000001 00000001 = 1 (BOOL[true]) //allow } } elseif ( $action == 'w' ) { if ( $premissions & 2 ) { // 7 = 00000111 & // 2 = 00000010 00000010 = 2 (BOOL[true]) //allow } } elseif ( $action == 'x' ) { if ( $premissions & 4 ) { // 7 = 00000111 & // 4 = 00000100 00000100 = 4 (BOOL[true]) //allow } } //group [5] if ( $action == 'r' ) { if ( $premissions & 1 ) { // 5 = 00000101 & // 1 = 00000001 00000001 = 1 (BOOL[true]) //allow } } elseif ( $action == 'w' ) { if ( $premissions & 2 ) { // 5 = 00000101 & // 2 = 00000010 00000000 = 0 (BOOL[false]) //deny } } elseif ( $action == 'x' ) { if ( $premissions & 4 ) { // 5 = 00000101 & // 4 = 00000100 00000100 = 4 (BOOL[true]) //allow } } //all [1] if ( $action == 'r' ) { if ( $premissions & 1 ) { // 1 = 00000001 & // 1 = 00000001 00000001 = 1 (BOOL[true]) //allow } } elseif ( $action == 'w' ) { if ( $premissions & 2 ) { // 1 = 00000001 & // 2 = 00000010 00000000 = 0 (BOOL[false]) //deny } } elseif ( $action == 'x' ) { if ( $premissions & 4 ) { // 1 = 00000001 & // 4 = 00000100 00000000 = 0 (BOOL[false]) //deny } } Link to comment https://forums.phpfreaks.com/topic/249449-recreate-unix-file-permissions/#findComment-1280950 Share on other sites More sharing options...
fenway Posted October 20, 2011 Share Posted October 20, 2011 I have no idea why you're doing any of this. Link to comment https://forums.phpfreaks.com/topic/249449-recreate-unix-file-permissions/#findComment-1280956 Share on other sites More sharing options...
Andy-H Posted October 21, 2011 Author Share Posted October 21, 2011 Why how would you do it? Link to comment https://forums.phpfreaks.com/topic/249449-recreate-unix-file-permissions/#findComment-1281052 Share on other sites More sharing options...
justinba1010 Posted October 22, 2011 Share Posted October 22, 2011 Well I think you need to open Terminal, and put chown -hR username /directory to be under a new owner Is that what you're looking for? Thats what I did to my debugger. chown -hR justin /opt/lampp/htdoc/ Link to comment https://forums.phpfreaks.com/topic/249449-recreate-unix-file-permissions/#findComment-1281316 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.