diff options
author | Mark Crane <mcrane@pfsense.org> | 2009-01-22 18:45:56 +0000 |
---|---|---|
committer | Mark Crane <mcrane@pfsense.org> | 2009-01-22 18:45:56 +0000 |
commit | 3e1caa8078443999129e65936f3a2062526ab1ef (patch) | |
tree | d08ca3ca4f8aaf319440e252dc1bcb53c89c0da8 /packages/phpservice/phpservice.inc | |
parent | 2734e7ba36ff7e7fc6c061a571d864264a62da0c (diff) | |
download | pfsense-packages-3e1caa8078443999129e65936f3a2062526ab1ef.tar.gz pfsense-packages-3e1caa8078443999129e65936f3a2062526ab1ef.tar.bz2 pfsense-packages-3e1caa8078443999129e65936f3a2062526ab1ef.zip |
New package PHPService
Diffstat (limited to 'packages/phpservice/phpservice.inc')
-rw-r--r-- | packages/phpservice/phpservice.inc | 225 |
1 files changed, 225 insertions, 0 deletions
diff --git a/packages/phpservice/phpservice.inc b/packages/phpservice/phpservice.inc new file mode 100644 index 00000000..bed136b2 --- /dev/null +++ b/packages/phpservice/phpservice.inc @@ -0,0 +1,225 @@ +<?php +/* $Id$ */ +/* +/* ========================================================================== */ +/* + phpservice.inc + Copyright (C) 2008 Mark J Crane + All rights reserved. + */ +/* ========================================================================== */ +/* + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. +*/ + +function pkg_is_service_running($servicename) +{ + exec("/bin/ps ax | awk '{ print $5 }'", $psout); + array_shift($psout); + foreach($psout as $line) { + $ps[] = trim(array_pop(explode(' ', array_pop(explode('/', $line))))); + } + if(is_service_running($servicename, $ps) or is_process_running($servicename) ) { + return true; + } + else { + return false; + } +} + +function byte_convert( $bytes ) { + + if ($bytes<=0) + return '0 Byte'; + + $convention=1000; //[1000->10^x|1024->2^x] + $s=array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB'); + $e=floor(log($bytes,$convention)); + return round($bytes/pow($convention,$e),2).' '.$s[$e]; +} + + +function sync_package_phpservice() +{ + + global $config; + if($config['installedpackages']['phpservice']['config'] != "") { + + conf_mount_rw(); + config_unlock(); + + + $tmp = "<?php\n"; + $tmp .= "\n"; + $tmp .= "// Set time limit to indefinite execution\n"; + $tmp .= "set_time_limit (0);\n"; + $tmp .= "\n"; + $tmp .= "//run this program as long as the pid file exists\n"; + $tmp .= "\$filename = '/tmp/phpmonitor.pid';\n"; + $tmp .= "\$fp = fopen(\$filename, 'w');\n"; + $tmp .= "fwrite(\$fp, \"If this file is deleted then phpmonitor will stop.\");\n"; + $tmp .= "fclose(\$fp);\n"; + $tmp .= "unset(\$filename);\n"; + $tmp .= "\n"; + $tmp .= "//require_once(\"config.inc\");\n"; + $tmp .= "//global \$config;\n"; + $tmp .= "//\$syslogaddress = \$config['syslog']['remoteserver'];\n"; + $tmp .= "\$syslogaddress = \"127.0.0.1\";\n"; + $tmp .= "\$syslogport = 514;\n"; + $tmp .= "echo \"syslog server: \".\$syslogaddress.\"\\n\";\n"; + $tmp .= "\n"; + $tmp .= "\n"; + $tmp .= "\n"; + $tmp .= "function send_to_syslog(\$syslogaddress, \$syslogport, \$syslogmsg) {\n"; + $tmp .= "\n"; + $tmp .= " \$fp = fsockopen(\"udp://\".\$syslogaddress, \$syslogport, \$errno, \$errstr);\n"; + $tmp .= " if (!\$fp) {\n"; + $tmp .= " //echo \"ERROR: \$errno - \$errstr<br />\\n\";\n"; + $tmp .= " } else {\n"; + $tmp .= " fwrite(\$fp, \$syslogmsg);\n"; + $tmp .= " fclose(\$fp);\n"; + $tmp .= " }\n"; + $tmp .= "\n"; + $tmp .= "}\n"; + $tmp .= "\n"; + $tmp .= "\n"; + $tmp .= "//\$msg = \"1.begin loop. \".date('r').\"\\n\";\n"; + $tmp .= "//\$fp = fopen('/tmp/phpmonitor.txt', 'a');\n"; + $tmp .= "//fwrite(\$fp, \$msg.\"\\n\");\n"; + $tmp .= "//fclose(\$fp);\n"; + $tmp .= "\n"; + $tmp .= "\$x = 0;\n"; + $tmp .= "while(\$x == 0) {\n"; + $tmp .= "\n"; + $tmp .= "\n"; + $tmp .= " if(!file_exists('/tmp/phpmonitor.pid')) {\n"; + $tmp .= " //if the file does not exist then close the program.\n"; + $tmp .= " echo \"program closing\\n\";\n"; + $tmp .= " return;\n"; + $tmp .= " }\n"; + $tmp .= "\n"; + $tmp .= "\n"; + + $tmp .= "//------------------------------------------\n"; + + foreach($config['installedpackages']['phpservice']['config'] as $rowhelper) { + + $tmp .= base64_decode($rowhelper['php']); + $tmp .= "\n"; + $tmp .= "//------------------------------------------\n"; + + } + + $tmp .= "\n"; + $tmp .= "\n"; + $tmp .= " //usleep(100000); //micro seconds //2 seconds 2000000\n"; + $tmp .= " sleep(1); //in seconds\n"; + $tmp .= " //if (\$x > 60){ exit; } //exit after 60 seconds for testing\n"; + $tmp .= "} //emd while\n"; + $tmp .= "\n"; + $tmp .= "\n"; + $tmp .= "?>"; + + $fout = fopen("/usr/local/pkg/phpservice.php","w"); + fwrite($fout, $tmp); + unset($tmp); + fclose($fout); + + conf_mount_ro(); + + } +} + + +function sync_package() +{ + + global $config; + sync_package_phpservice(); + + //if (!is_dir('/usr/local/www/phpservice/')) { + //exec("mkdir /usr/local/www/phpservice/"); + //} + +} + + +function php_install_command() +{ + + global $config; + conf_mount_rw(); + config_lock(); + + //if (!is_dir('/usr/local/www/phpservice/')) { + //exec("mkdir /usr/local/www/phpservice/"); + //} + + + //rename PHP files from .tmp to .php + exec("cp /tmp/phpservice_php.tmp /usr/local/www/phpservice_php.php"); + unlink_if_exists("/tmp/phpservice_php.tmp"); + + exec("cp /tmp/phpservice.tmp /usr/local/pkg/phpservice.php"); + unlink_if_exists("/tmp/phpservice.tmp"); + + + //write_config(); + + + write_rcfile(array( + "file" => "phpservice.sh", + "start" => "/usr/local/bin/php /usr/local/pkg/phpservice.php", + "stop" => "rm /tmp/phpmonitor.pid" + ) + ); + + sync_package(); + $handle = popen("/usr/local/etc/rc.d/phpservice.sh start", "r"); + pclose($handle); + + //if (pkg_is_service_running('phpservice')) { + //documentation purposes + //} + + conf_mount_ro(); + config_unlock(); + +} + + +function deinstall_command() +{ + + conf_mount_rw(); + config_lock(); + $handle = popen("/usr/local/etc/rc.d/phpservice.sh stop", "r"); + unlink_if_exists("/usr/local/pkg/phpservice.xml"); + unlink_if_exists("/usr/local/pkg/phpservice.inc"); + unlink_if_exists("/usr/local/www/phpservice.inc"); + unlink_if_exists("/usr/local/etc/rc.d/phpservice.sh"); + conf_mount_ro(); + config_unlock(); + +} + +?>
\ No newline at end of file |