Subversion Repositories php_utils

Rev

Rev 28 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
27 daniel-mar 1
<?php
2
 
3
/*
4
 * fixed_length_microtime() for PHP
5
 * Copyright 2022 Daniel Marschall, ViaThinkSoft
6
 * Version 2022-03-03
7
 *
8
 * Licensed under the Apache License, Version 2.0 (the "License");
9
 * you may not use this file except in compliance with the License.
10
 * You may obtain a copy of the License at
11
 *
12
 *     http://www.apache.org/licenses/LICENSE-2.0
13
 *
14
 * Unless required by applicable law or agreed to in writing, software
15
 * distributed under the License is distributed on an "AS IS" BASIS,
16
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
 * See the License for the specific language governing permissions and
18
 * limitations under the License.
19
 */
20
 
21
function fixed_length_microtime() {
22
        // This function outputs a fixed-length microtime (can be used for sorting)
23
        // Additionally, it ensures that the output is always different by waiting 1 microsecond
24
 
25
        $ary = explode('.', microtime(true));
26
        if (!isset($ary[1])) $ary[1] = 0;
27
        $ret = $ary[0].'_'.str_pad($ary[1], 4, 0, STR_PAD_RIGHT);
28
 
29
        while (true) {
30
                $ary = explode('.', microtime(true));
31
                if (!isset($ary[1])) $ary[1] = 0;
32
                $ret2 = $ary[0].'_'.str_pad($ary[1], 4, 0, STR_PAD_RIGHT);
33
                // Wait until the value changes. This ensures that the microtime will never be the same
34
                // sleep(0.1) does not work for some reason.
35
                if ($ret != $ret2) break;
36
        }
37
 
38
        return $ret;
39
}