Example #1
10
function file_write($path, $data, $simple = false, $skip_purge = false)
{
    global $config, $debug;
    if (preg_match('/^remote:\\/\\/(.+)\\:(.+)$/', $path, $m)) {
        if (isset($config['remote'][$m[1]])) {
            require_once 'inc/remote.php';
            $remote = new Remote($config['remote'][$m[1]]);
            $remote->write($data, $m[2]);
            return;
        } else {
            error('Invalid remote server: ' . $m[1]);
        }
    }
    if (!function_exists("dio_truncate")) {
        if (!($fp = fopen($path, $simple ? 'w' : 'c'))) {
            error('Unable to open file for writing: ' . $path);
        }
        // File locking
        if (!$simple && !flock($fp, LOCK_EX)) {
            error('Unable to lock file: ' . $path);
        }
        // Truncate file
        if (!$simple && !ftruncate($fp, 0)) {
            error('Unable to truncate file: ' . $path);
        }
        // Write data
        if (($bytes = fwrite($fp, $data)) === false) {
            error('Unable to write to file: ' . $path);
        }
        // Unlock
        if (!$simple) {
            flock($fp, LOCK_UN);
        }
        // Close
        if (!fclose($fp)) {
            error('Unable to close file: ' . $path);
        }
    } else {
        if (!($fp = dio_open($path, O_WRONLY | O_CREAT, 0644))) {
            error('Unable to open file for writing: ' . $path);
        }
        // File locking
        if (dio_fcntl($fp, F_SETLKW, array('type' => F_WRLCK)) === -1) {
            error('Unable to lock file: ' . $path);
        }
        // Truncate file
        if (!dio_truncate($fp, 0)) {
            error('Unable to truncate file: ' . $path);
        }
        // Write data
        if (($bytes = dio_write($fp, $data)) === false) {
            error('Unable to write to file: ' . $path);
        }
        // Unlock
        dio_fcntl($fp, F_SETLK, array('type' => F_UNLCK));
        // Close
        dio_close($fp);
    }
    /**
     * Create gzipped file.
     *
     * When writing into a file foo.bar and the size is larger or equal to 1
     * KiB, this also produces the gzipped version foo.bar.gz
     *
     * This is useful with nginx with gzip_static on.
     */
    if ($config['gzip_static']) {
        $gzpath = "{$path}.gz";
        if ($bytes & ~0x3ff) {
            // if ($bytes >= 1024)
            if (file_put_contents($gzpath, gzencode($data), $simple ? 0 : LOCK_EX) === false) {
                error("Unable to write to file: {$gzpath}");
            }
            if (!touch($gzpath, filemtime($path), fileatime($path))) {
                error("Unable to touch file: {$gzpath}");
            }
        } else {
            @unlink($gzpath);
        }
    }
    if (!$skip_purge && isset($config['purge'])) {
        // Purge cache
        if (basename($path) == $config['file_index']) {
            // Index file (/index.html); purge "/" as well
            $uri = dirname($path);
            // root
            if ($uri == '.') {
                $uri = '';
            } else {
                $uri .= '/';
            }
            purge($uri);
        }
        purge($path);
    }
    if ($config['debug']) {
        $debug['write'][] = $path . ': ' . $bytes . ' bytes';
    }
    event('write', $path);
}
Example #2
0
     //we're on windows configure com port from command line
     exec("mode {$portName} baud={$baudRate} data={$bits} stop={$spotBit} parity=n xon=on");
 } else {
     $bbSerialPort = dio_open($portName, O_RDWR | O_NOCTTY | O_NONBLOCK);
     dio_fcntl($bbSerialPort, F_SETFL, O_SYNC);
     //we're on 'nix configure com from php direct io function
     dio_tcsetattr($bbSerialPort, array('baud' => $baudRate, 'bits' => $bits, 'stop' => $spotBit, 'parity' => 0));
 }
 if (!$bbSerialPort) {
     echoFlush("Could not open Serial port {$portName} ");
     exit;
 }
 // send data
 $dataToSend = "4 ";
 echoFlush("Writing to serial port data: \"{$dataToSend}\"");
 $bytesSent = dio_write($bbSerialPort, $dataToSend);
 echoFlush("Sent: {$bytesSent} bytes");
 /*
 //date_default_timezone_set ("Europe/London");
 
 $runForSeconds = new DateInterval("PT10S"); //10 seconds
 $endTime = (new DateTime())->add($runForSeconds);
 
 echoFlush(  "Waiting for {$runForSeconds->format('%S')} seconds to recieve data on serial port" );
 
 while (new DateTime() < $endTime) {
 
 	$data = dio_read($bbSerialPort, 256); //this is a blocking call
 	if ($data) {
 		echoFlush(  "Data Recieved: ". $data );
 	}
Example #3
0
 function bbc_write_entry()
 {
     global $BBC_CACHE_PATH;
     $file = $this->filename;
     $base = basename($file);
     if (!is_readable($file)) {
         return array($base, "r");
     }
     if (!is_writable($file)) {
         return array($base, "w");
     }
     $fp = defined("_BBC_DIO") ? dio_open($file, O_RDWR | O_APPEND) : fopen($file, "ab+");
     if (defined("_BBC_DIO") && dio_fcntl($fp, F_SETLK, 1) !== -1) {
         dio_write($fp, $this->string);
         dio_fcntl($fp, F_SETLK, 0);
         $ok = 1;
     } else {
         if (defined("_BBC_SEM") ? $id = bbc_semlock($file) : flock($fp, LOCK_EX)) {
             fputs($fp, $this->string);
             fflush($fp);
             defined("_BBC_SEM") ? sem_release($id) : flock($fp, LOCK_UN);
             $ok = 1;
         }
     }
     defined("_BBC_DIO") ? dio_close($fp) : fclose($fp);
     return isset($ok) ? array($base, "o") : array($base, "l");
 }
Example #4
0
function bbc_begin_write($file, $data)
{
    $fp = defined("_BBC_DIO") ? dio_open($file, O_RDWR | O_APPEND) : fopen($file, "rb+");
    if (defined("_BBC_DIO") && dio_fcntl($fp, F_SETLK, 1) !== -1) {
        dio_seek($fp, 0);
        dio_truncate($fp, 0);
        dio_write($fp, $data);
        return $fp;
    } elseif (defined("_BBC_SEM") ? $id = bbc_semlock($file) : flock($fp, LOCK_EX)) {
        rewind($fp);
        fwrite($fp, $data);
        fflush($fp);
        ftruncate($fp, ftell($fp));
        return defined("_BBC_SEM") ? array($fp, $id) : $fp;
    } else {
        defined("_BBC_DIO") ? dio_close($fp) : fclose($fp);
        return false;
    }
}
Example #5
0
 public function write($data, $length = self::DEFAULT_LENGTH, $wait = self::DEFAULT_WAIT)
 {
     $bytes = dio_write($this->serial, $data);
     usleep($wait);
     return $bytes;
 }
        dio_tcsetattr($bbSerialPort, array('baud' => $baudRate, 'bits' => $bits, 'stop' => $spotBit, 'parity' => 0));
    }
    if (!$bbSerialPort) {
        echoFlush("Could not open Serial port {$portName} ");
        exit;
    }
    // send data
    $dataToSend = $command;
    echoFlush("Writing to serial port data: \"{$dataToSend}\"");
    $bytesSent = dio_write($bbSerialPort, $dataToSend);
    echoFlush("Sent: {$bytesSent} bytes");
    //dio_write($bbSerialPort, "111111111111" );
    //date_default_timezone_set ("Europe/London");
    $runForSeconds = new DateInterval("PT10S");
    //10 seconds
    $endTime = (new DateTime())->add($runForSeconds);
    echoFlush("Waiting for {$runForSeconds->format('%S')} seconds to recieve data on serial port");
    while (new DateTime() < $endTime) {
        dio_write($bbSerialPort, $command);
        $data = dio_read($bbSerialPort, 10);
        //this is a blocking call
        if ($data) {
            echoFlush("Data Recieved: " . $data);
        }
    }
    echoFlush("Closing Port");
    dio_close($bbSerialPort);
} catch (Exception $e) {
    echoFlush($e->getMessage());
    exit(1);
}
Example #7
0
function file_write($path, $data, $simple = false, $skip_purge = false)
{
    global $config, $debug;
    //echo "file_write($path, ", strlen($data), ", $simple, $skip_purge)<br>\n";
    $board = '';
    if (strpos($path, '/') !== false) {
        $parts = explode('/', $path, 2);
        $board = $parts[0];
    }
    $useCache = true;
    $useFile = false;
    if ($path == 'main.js') {
        $useCache = false;
        $useFile = true;
    }
    if ($board && $useCache) {
        if (!isset($config['cache']['odiliMagicBoards'][$board])) {
            $useCache = false;
            $useFile = true;
        } else {
            $type = strtolower($config['cache']['odiliMagicBoards'][$board]);
            if ($type === 'hybrid') {
                $useFile = true;
                $useCache = true;
            } elseif ($type === 'memory') {
                // defaults will be fine
                $useCache = true;
                $useFile = false;
            } else {
                $useCache = false;
                $useFile = true;
            }
        }
    }
    if ($useCache) {
        Cache::store('vichan_filecache_' . $path, $data, -1);
        if ($config['gzip_static']) {
            $bytes = strlen($data);
            if ($bytes & ~0x3ff) {
                Cache::store('vichan_filecache_' . $path . '.gz', gzencode($data), -1);
            } else {
                Cache::delete('vichan_filecache_' . $path . '.gz');
            }
        }
    }
    if (preg_match('/^remote:\\/\\/(.+)\\:(.+)$/', $path, $m)) {
        if (isset($config['remote'][$m[1]])) {
            require_once 'inc/remote.php';
            $remote = new Remote($config['remote'][$m[1]]);
            $remote->write($data, $m[2]);
            return;
        } else {
            error('Invalid remote server: ' . $m[1]);
        }
    }
    if ($useFile) {
        if (!function_exists("dio_truncate")) {
            if (!($fp = fopen($path, $simple ? 'w' : 'c'))) {
                error('Unable to open file for writing: ' . $path);
            }
            // File locking
            if (!$simple && !flock($fp, LOCK_EX)) {
                error('Unable to lock file: ' . $path);
            }
            // Truncate file
            if (!$simple && !ftruncate($fp, 0)) {
                error('Unable to truncate file: ' . $path);
            }
            // Write data
            if (($bytes = fwrite($fp, $data)) === false) {
                error('Unable to write to file: ' . $path);
            }
            // Unlock
            if (!$simple) {
                flock($fp, LOCK_UN);
            }
            // Close
            if (!fclose($fp)) {
                error('Unable to close file: ' . $path);
            }
        } else {
            if (!($fp = dio_open($path, O_WRONLY | O_CREAT, 0644))) {
                error('Unable to open file for writing: ' . $path);
            }
            // File locking
            if (dio_fcntl($fp, F_SETLKW, array('type' => F_WRLCK)) === -1) {
                error('Unable to lock file: ' . $path);
            }
            // Truncate file
            if (!dio_truncate($fp, 0)) {
                error('Unable to truncate file: ' . $path);
            }
            // Write data
            if (($bytes = dio_write($fp, $data)) === false) {
                error('Unable to write to file: ' . $path);
            }
            // Unlock
            dio_fcntl($fp, F_SETLK, array('type' => F_UNLCK));
            // Close
            dio_close($fp);
        }
        /**
         * Create gzipped file.
         *
         * When writing into a file foo.bar and the size is larger or equal to 1
         * KiB, this also produces the gzipped version foo.bar.gz
         *
         * This is useful with nginx with gzip_static on.
         */
        if ($config['gzip_static']) {
            $gzpath = "{$path}.gz";
            if ($bytes & ~0x3ff) {
                // if ($bytes >= 1024)
                if (file_put_contents($gzpath, gzencode($data), $simple ? 0 : LOCK_EX) === false) {
                    error("Unable to write to file: {$gzpath}");
                }
                if (!touch($gzpath, filemtime($path), fileatime($path))) {
                    error("Unable to touch file: {$gzpath}");
                }
            } else {
                @unlink($gzpath);
            }
        }
    }
    if (!$skip_purge && isset($config['purge'])) {
        // Purge cache
        if (basename($path) == $config['file_index']) {
            // Index file (/index.html); purge "/" as well
            $uri = dirname($path);
            // root
            if ($uri == '.') {
                $uri = '';
            } else {
                $uri .= '/';
            }
            purge($uri);
        }
        purge($path);
    }
    if ($config['debug']) {
        $bytes = strlen($data);
        $debug['write'][] = $path . ': ' . $bytes . ' bytes';
    }
    event('write', $path);
}
Example #8
0
 /**
  * 写入 pid 文件 
  * 
  * @return void
  */
 private function _write_pid()
 {
     $fp = dio_open($this->__pid_file, O_WRONLY | O_CREAT, 0644);
     dio_truncate($fp, 0);
     dio_write($fp, posix_getpid());
 }
Example #9
0
 protected function spoolData()
 {
     // write stdin to a temp file
     $input = fopen($this->config['inputStream'], "rb");
     stream_set_blocking($input, 0);
     if (extension_loaded('dio') && isset($this->dataConfig['useDio']) && $this->dataConfig['useDio']) {
         $fd = dio_open($this->tmpPath, O_CREAT | O_NONBLOCK | O_WRONLY);
         $totalWritten = 0;
         while ($data = fread($input, $this->config['spoolReadSize'])) {
             $totalWritten += dio_write($fd, $data);
         }
         // make a check that we wrote all of the data that we expected to write
         // if not throw an exception
         if (isset($this->params['contentLength']) && $this->params['contentLength'] > 0 && $this->params['contentLength'] != $totalWritten) {
             dio_close($fd);
             unlink($this->tmpPath);
             $msg = sprintf($this->config['exceptionMsgs']['incompleteWrite'], $this->params['contentLength'], $totalWritten);
             throw new WebDFS_Exception($msg);
         }
         $this->fsync($fd);
         dio_close($fd);
         fclose($input);
     } else {
         $totalWritten = file_put_contents($this->tmpPath, $input);
         if (isset($this->params['contentLength']) && $this->params['contentLength'] > 0 && $this->params['contentLength'] != $totalWritten) {
             unlink($this->tmpPath);
             $msg = sprintf($this->config['exceptionMsgs']['incompleteWrite'], $this->params['contentLength'], $totalWritten);
             throw new WebDFS_Exception($msg);
         }
     }
 }
Example #10
0
function callAT($cmd, $modem, $log = false, $end = 0xd)
{
    $cmd = trim($cmd);
    $cmd = $cmd . chr($end);
    if ($log) {
        webLog($cmd, "&gt;", true);
    }
    dio_write($modem, $cmd);
    //sleep(1);
    usleep(500000);
    $cmd = dio_read($modem);
    $cmd = trim($cmd);
    if ($log) {
        webLog($cmd, "&lt;");
    }
    return $cmd;
}