g2 Sat Jun 13 03:13:31 2009 UTC
Added files:
/phpruntests/code-samples/taskScheduler/classes task.php
taskScheduler.php
taskInterface.php
/phpruntests/code-samples/taskScheduler/example3/files/src/adv
023.phpt
010.phpt
009.phpt
026.phpt
014.phpt
027.phpt
020.phpt
011.phpt
012.phpt
013.phpt
017.phpt
022.phpt
025.phpt
016.phpt
015.phpt
018.phpt
024.phpt
019.phpt
008.phpt
/phpruntests/code-samples/taskScheduler/example3/imgConverter
imageCreator.php
fileReader.php
fileCreator.php
imageReader.php
/phpruntests/code-samples/taskScheduler/example3/files/src/func
007.phpt
010.phpt
002.phpt
006.phpt
008.phpt
005a.phpt
005.phpt
003.phpt
004.phpt
001.phpt
009.phpt
/phpruntests/code-samples/taskScheduler/example3/files/src/basic
007.phpt
006.phpt
001.phpt
004.phpt
003.phpt
005.phpt
002.phpt
/phpruntests/code-samples/taskScheduler/example1 main.php
taskCalculate.php
/phpruntests/code-samples/taskScheduler/example3 taskConvert.php
main.php
/phpruntests/code-samples/taskScheduler run.php
/phpruntests/code-samples/taskScheduler/example2 taskSleep.php
main.php
Log:
phpruntests - added taskScheduler-prototype
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/classes/task.php?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/classes/task.php
+++ phpruntests/code-samples/taskScheduler/classes/task.php
<?php
abstract class task
{
const NOEX = 0;
const PASS = 1;
const FAIL = -1;
private $state = self::NOEX;
private $index = NULL;
private $message = NULL;
public function setState($state)
{
$this->state = $state;
}
public function getState()
{
return $this->state;
}
public function setMessage($msg)
{
$this->message = $msg;
}
public function getMessage()
{
return $this->message;
}
public function setIndex($index)
{
$this->index = $index;
}
public function getIndex()
{
return $this->index;
}
}
?>
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/classes/taskScheduler.php?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/classes/taskScheduler.php
+++ phpruntests/code-samples/taskScheduler/classes/taskScheduler.php
<?php
declare(ticks=true);
class taskScheduler
{
const MSG_QUEUE_KEY = 1234; // id of the message-queue
const MSG_QUEUE_SIZE = 1024; // max-size of a single message
const KILL_CHILD = 'killBill'; // kill-signal to terminate a child
private $taskList = array();
private $processCount = NULL;
private $inputQueue = NULL;
private $pidStore = array();
private $time = 0;
private $countPass = 0;
private $countFail = 0;
private $groupTasks = false;
/**
* the constructor
*
* @param array $taskList (optional)
* @param int $processCount (optional)
*/
public function __construct(array $taskList=NULL, $processCount=NULL)
{
if (is_array($taskList)) {
$this->setTaskList($taskList);
}
$this->setProcessCount($processCount);
}
/**
* sets the task-list which has to be an array of task-objects.
* it's also possible to use a multidimensional array. in this case the
* tasks are distributed to the child-processes exactly in the way as they
* are grouped in the list. the first-level index strictly has to be
* numeric and continuous starting with zero.
*
* @param array $taskList
*/
public function setTaskList(array $taskList)
{
if (is_array($taskList[0])) {
$this->groupTasks = true;
$this->processCount = sizeof($taskList);
}
$this->taskList = $taskList;
}
/**
* @return array $taskList
*/
public function getTaskList()
{
return $this->taskList;
}
/**
* sets the number of child-processes.
* in the case of using a multidimensional task-list this parameter is
* ignored and set to the number of task-groups.
*
* @param int $count
*/
public function setProcessCount($processCount)
{
if ($this->groupTasks !== true && is_numeric($processCount) &&
$processCount >= 0) {
$this->processCount = $processCount;
}
}
/**
* removes the used message-queues.
*/
private static function cleanUp()
{
@msg_remove_queue(msg_get_queue(self::MSG_QUEUE_KEY));
@msg_remove_queue(msg_get_queue(self::MSG_QUEUE_KEY+1));
logg("CLEAN UP");
}
/**
* the signal-handler is called by the interrupt- or quit-signal and
calls
* the cleanUp-method.
*
* @param int $signal
*/
public static function signalHandler($signal)
{
logg("SIGNAL: $signal");
switch($signal) {
case SIGINT:
case SIGQUIT:
self::cleanUp();
die("\n");
break;
default:
break;
}
}
/**
* switch to run the classic- or the fork-mode
*/
public function run()
{
if ($this->processCount > 0) {
$this->runFork();
}
else $this->runClassic();
}
/**
* executes the tasks in a simple loop
*
* @return void
*/
private function runClassic()
{
$s = microtime(true);
for ($i=0; $i<sizeof($this->taskList); $i++) {
$task = $this->taskList[$i];
if ($task->run() === true) {
$task->setState(task::PASS);
$this->countPass++;
} else {
$task->setState(task::FAIL);
$this->countFail++;
}
print ".";
flush();
$this->taskList[$i] = $task;
}
$error = microtime(true);
$this->time = round($error-$s,5);
return;
}
/**
* starts the sender, the receiver and forks the defined
* number of child-processes.
*
* @return void
*/
private function runFork()
{
$startTime = microtime(true);
// register signal-handler
pcntl_signal(SIGINT, "taskScheduler::signalHandler");
pcntl_signal(SIGQUIT, "taskScheduler::signalHandler");
// trim the processCount if nesecarry
if (is_null($this->processCount) || $this->processCount >
sizeof($this->taskList)) {
$this->processCount = sizeof($this->taskList);
}
// fork the child-processes
for ($i=0; $i<=$this->processCount; $i++) {
$this->pidStore[$i] = pcntl_fork();
switch ($this->pidStore[$i]) {
case -1: // failure
die("could not fork");
break;
case 0: // child
if ($i==0) {
$this->sender();
} else {
$cid = ($this->groupTasks ==
true) ? $i : NULL;
$this->child($cid);
}
break;
default: // parent
break;
}
}
// start the receiver
$this->receiver();
// wait until all child-processes are terminated
for ($i=0; $i<=$this->processCount; $i++) {
pcntl_waitpid($this->pidStore[$i], $status);
logg("child $i terminated - status $status");
}
$endTime = microtime(true);
$this->time = round($endTime-$startTime,5);
// remove the msg-queue
self::cleanUp();
logg("EXIT MAIN");
return;
}
/**
* the receiver is listening to the result-queue and stores the
incomming
* tasks back to the task-list.
* when finished it sends the kill-signal to all children and terminates
* itself.
*
* @return void
*/
private function receiver()
{
logg("RECEIVER START - ".sizeof($this->taskList)." tasks");
$resultQueue = msg_get_queue(self::MSG_QUEUE_KEY+1);
$task = '';
$type = 1;
if ($this->groupTasks == true) {
$limit = 0;
foreach ($this->taskList as $list) {
$limit += sizeof($list);
}
} else {
$limit = sizeof($this->taskList);
}
for ($i=0; $i<$limit; $i++) {
if (msg_receive($resultQueue, 0, $type,
self::MSG_QUEUE_SIZE, $task, true, NULL, $error)) {
// check state
if ($task->getState() == task::PASS) {
$this->countPass++;
} else {
$this->countFail++;
}
// store result
$index = $task->getIndex();
if ($this->groupTasks == true) {
$this->taskList[$type-2][$index] =
$task;
logg("RECEIVER store task
".($type-1)."-$index");
} else {
$this->taskList[$index] = $task;
logg("RECEIVER store task $index");
}
}
else logg("RECEIVER ERROR $error");
}
$inputQueue = msg_get_queue(self::MSG_QUEUE_KEY);
for ($i=1; $i<=$this->processCount; $i++) {
if (msg_send($inputQueue, $i, self::KILL_CHILD, true,
true, $error)) {
logg("RECEIVER send KILL_CHILD");
}
else logg("RECEIVER ERROR $error");
}
logg("RECEIVER EXIT");
return;
}
/**
* the sender is passes through the task-list and distributes the single
* tasks to the child-processes using the input-queue.
* when finished it terminates itself.
*
* @return void
*/
private function sender()
{
logg("SENDER START - ".sizeof($this->taskList)." tasks");
$this->inputQueue = msg_get_queue(self::MSG_QUEUE_KEY);
for ($i=0; $i<sizeof($this->taskList); $i++) {
if ($this->groupTasks == true) {
for ($j=0; $j<sizeof($this->taskList[$i]);
$j++) {
$this->sendTask($this->taskList[$i][$j], $j, $i+1);
}
} else {
$this->sendTask($this->taskList[$i], $i);
}
}
logg("SENDER EXIT");
exit(0);
}
/**
* helper-class of sender.
* sends a task to a child-process using the input-queue.
*
* @param task $task the task to send
* @param int $index the task's index in the taskList
* @param int $type the message-type (default=1)
* @return void
*/
private function sendTask(task $task, $index, $type=1)
{
$task->setIndex($index);
if (msg_send($this->inputQueue, $type, $task, true, true,
$error)) {
logg("SENDER send task $type - $index");
}
else logg("SENDER ERROR $error");
return;
}
/**
* the child is listening to the input-queue and executes the incomming
* tasks. afterwards it setts the task-state and sends it back to the
* receiver by the result-queue.
* after receiving the kill-signal from the receiver it terminates
itself.
*
* @param int $cid the child-id (default=NULL)
* @return void
*/
private function child($cid=NULL)
{
if (is_null($cid)) {
$cid = 0;
}
logg("child $cid START");
$inputQueue = msg_get_queue(self::MSG_QUEUE_KEY);
$resultQueue = msg_get_queue(self::MSG_QUEUE_KEY+1);
$type = 1;
while (true) {
if (msg_receive($inputQueue, $cid, $type,
self::MSG_QUEUE_SIZE, $task, true, NULL, $error)) {
if ($task == self::KILL_CHILD)
break;
$index = $task->getIndex();
logg("child $cid - run task $index");
if ($task->run() === true) {
$task->setState(task::PASS);
} else {
$task->setState(task::FAIL);
}
print ".";
flush();
if (msg_send($resultQueue, $cid+1, $task, true,
true, $error)) {
logg("child $cid - send task $index");
}
else logg("child $cid ERROR $error");
}
else logg("child $cid ERROR $error");
}
logg("child $cid EXIT");
exit(0);
}
/**
* prints the statistic
*
* @return void
*/
public function printStatistic()
{
print "\n----------------------------------------\n";
if ($this->groupTasks == true) {
$count = 0;
foreach ($this->taskList as $list) {
$count += sizeof($list);
}
print "Groups:\t\t".sizeof($this->taskList)."\n";
print "Tasks:\t\t".$count."\n";
} else {
$count = sizeof($this->taskList);
print "Tasks:\t\t".$count."\n";
}
print "PASSED:\t\t".$this->countPass."
(".round($this->countPass/$count*100,2)."%)\n";
print "FAILED:\t\t".$this->countFail."
(".round($this->countFail/$count*100,2)."%)\n";
print "Processes:\t".$this->processCount."\n";
print "Seconds:\t".$this->time."\n";
if ($this->processCount > 0) {
print "AVG
sec/task:\t".round($this->time/$this->processCount,5)."\n";
}
print "----------------------------------------\n";
flush();
}
/**
* prints a overview of the faild tasks
*
* @return void
*/
public function printFailedTasks()
{
if ($this->countFail > 0) {
print "FAILED TASKS";
print "\n----------------------------------------\n";
for ($i=0; $i<sizeof($this->taskList); $i++) {
$task = $this->taskList[$i];
if ($task->getState() == task::FAIL) {
print "Task $i:
".$task->getMessage()."\n";
}
}
print "----------------------------------------\n";
flush();
}
}
}
?>
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/classes/taskInterface.php?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/classes/taskInterface.php
+++ phpruntests/code-samples/taskScheduler/classes/taskInterface.php
<?php
interface taskInterface
{
public function run();
}
?>
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/adv/023.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/adv/023.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/adv/023.phpt
--TEST--
Cookies test#2
--COOKIE--
c o o k i e=value; c o o k i e= v a l u e ;;c%20o+o
k+i%20e=v;name="value","value",UEhQIQ==;UEhQIQ==foo
--FILE--
<?php
var_dump($_COOKIE);
?>
--EXPECT--
array(3) {
[u"c_o_o_k_i_e"]=>
unicode(1) "v"
[u"name"]=>
unicode(24) ""value","value",UEhQIQ=="
[u"UEhQIQ"]=>
unicode(4) "=foo"
}
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/adv/010.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/adv/010.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/adv/010.phpt
--TEST--
Testing | and & operators
--FILE--
<?php $a=8; $b=4; $c=8; echo $a|$b&$c?>
--EXPECT--
8
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/adv/009.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/adv/009.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/adv/009.phpt
--TEST--
Subtract 3 variables and print result
--FILE--
<?php $a=27; $b=7; $c=10; $d=$a-$b-$c; echo $d?>
--EXPECT--
10
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/adv/026.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/adv/026.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/adv/026.phpt
--TEST--
Registration of HTTP_RAW_POST_DATA due to unknown content-type
--INI--
magic_quotes_gpc=0
always_populate_raw_post_data=0
--SKIPIF--
<?php if (php_sapi_name()=='cli') echo 'skip'; ?>
--POST_RAW--
Content-Type: unknown/type
a=1&b=ZYX
--FILE--
<?php
var_dump($_POST, $HTTP_RAW_POST_DATA);
?>
--EXPECT--
array(0) {
}
unicode(9) "a=1&b=ZYX"
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/adv/014.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/adv/014.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/adv/014.phpt
--TEST--
POST Method test and arrays - 2
--SKIPIF--
<?php if (php_sapi_name()=='cli') echo 'skip'; ?>
--POST--
a[]=1&a[]=1
--FILE--
<?php
var_dump($_POST['a']);
?>
--EXPECT--
array(2) {
[0]=>
unicode(1) "1"
[1]=>
unicode(1) "1"
}
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/adv/027.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/adv/027.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/adv/027.phpt
--TEST--
Handling of max_input_nesting_level being reached
--INI--
magic_quotes_gpc=0
always_populate_raw_post_data=0
display_errors=0
max_input_nesting_level=10
track_errors=1
log_errors=0
--SKIPIF--
<?php if (php_sapi_name()=='cli') echo 'skip'; ?>
--POST--
a=1&b=ZYX&c[][][][][][][][][][][][][][][][][][][][][][]=123&d=123&e[][]][]=3
--FILE--
<?php
var_dump($_POST, $php_errormsg);
?>
--EXPECT--
array(4) {
[u"a"]=>
unicode(1) "1"
[u"b"]=>
unicode(3) "ZYX"
[u"d"]=>
unicode(3) "123"
[u"e"]=>
array(1) {
[0]=>
array(1) {
[0]=>
unicode(1) "3"
}
}
}
unicode(106) "Input variable nesting level exceeded 10. To increase the limit
change max_input_nesting_level in php.ini."
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/adv/020.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/adv/020.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/adv/020.phpt
--TEST--
POST Method test and arrays - 8
--SKIPIF--
<?php if (php_sapi_name()=='cli') echo 'skip'; ?>
--POST--
a[a[]]=1&a[b[]]=3
--FILE--
<?php
var_dump($_POST['a']);
?>
--EXPECT--
array(2) {
[u"a["]=>
unicode(1) "1"
[u"b["]=>
unicode(1) "3"
}
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/adv/011.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/adv/011.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/adv/011.phpt
--TEST--
Testing $argc and $argv handling (GET)
--SKIPIF--
<?php if (php_sapi_name()=='cli') echo 'skip'; ?>
--INI--
register_argc_argv=1
--GET--
ab+cd+ef+123+test
--FILE--
<?php
for ($i=0; $i<$_SERVER['argc']; $i++) {
echo "$i: ".$_SERVER['argv'][$i]."\n";
}
?>
--EXPECT--
0: ab
1: cd
2: ef
3: 123
4: test
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/adv/012.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/adv/012.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/adv/012.phpt
--TEST--
Testing $argc and $argv handling (cli)
--SKIPIF--
<?php if(php_sapi_name()!='cli') echo 'skip'; ?>
--INI--
register_argc_argv=1
variables_order=GPS
--ARGS--
ab cd ef 123 test
--FILE--
<?php
$argc = $_SERVER['argc'];
$argv = $_SERVER['argv'];
for ($i=1; $i<$argc; $i++) {
echo ($i-1).": ".$argv[$i]."\n";
}
?>
--EXPECT--
0: ab
1: cd
2: ef
3: 123
4: test
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/adv/013.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/adv/013.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/adv/013.phpt
--TEST--
POST Method test and arrays
--SKIPIF--
<?php if (php_sapi_name()=='cli') echo 'skip'; ?>
--POST--
a[]=1
--FILE--
<?php
var_dump($_POST['a']);
?>
--EXPECT--
array(1) {
[0]=>
unicode(1) "1"
}
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/adv/017.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/adv/017.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/adv/017.phpt
--TEST--
POST Method test and arrays - 5
--SKIPIF--
<?php if (php_sapi_name()=='cli') echo 'skip'; ?>
--POST--
a[]=1&a[a]=1&a[b]=3
--FILE--
<?php
var_dump($_POST['a']);
?>
--EXPECT--
array(3) {
[0]=>
unicode(1) "1"
[u"a"]=>
unicode(1) "1"
[u"b"]=>
unicode(1) "3"
}
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/adv/022.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/adv/022.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/adv/022.phpt
--TEST--
Cookies test#1
--COOKIE--
cookie1=val1 ; cookie2=val2%20; cookie3=val 3.; cookie 4= value 4 %3B;
cookie1=bogus; %20cookie1=ignore;+cookie1=ignore;cookie1;cookie 5=%20 value;
cookie%206=þæö;cookie+7=;$cookie.8;cookie-9=1;;;- & % $cookie 10=10
--FILE--
<?php
var_dump($_COOKIE);
?>
--EXPECTF--
array(10) {
[u"cookie1"]=>
unicode(0) ""
[u"cookie2"]=>
unicode(5) "val2 "
[u"cookie3"]=>
unicode(6) "val 3."
[u"cookie_4"]=>
unicode(10) " value 4 ;"
[u"cookie__5"]=>
unicode(7) " value"
[u"cookie_6"]=>
unicode(3) "%s"
[u"cookie_7"]=>
unicode(0) ""
[u"$cookie_8"]=>
unicode(0) ""
[u"cookie-9"]=>
unicode(1) "1"
[u"-_&_%_$cookie_10"]=>
unicode(2) "10"
}
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/adv/025.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/adv/025.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/adv/025.phpt
--TEST--
Test HTTP_RAW_POST_DATA with excessive post length
--INI--
magic_quotes_gpc=0
always_populate_raw_post_data=1
post_max_size=1K
--SKIPIF--
<?php if (php_sapi_name()=='cli') echo 'skip'; ?>
--POST--
a=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaa
--FILE--
<?php
var_dump($_POST, $HTTP_RAW_POST_DATA);
?>
--EXPECTF--
Warning: Unknown: POST Content-Length of 2050 bytes exceeds the limit of 1024
bytes in Unknown on line 0
Warning: Cannot modify header information - headers already sent in Unknown on
line 0
Notice: Undefined variable: HTTP_RAW_POST_DATA in %s on line %d
array(0) {
}
NULL
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/adv/016.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/adv/016.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/adv/016.phpt
--TEST--
POST Method test and arrays - 4
--SKIPIF--
<?php if (php_sapi_name()=='cli') echo 'skip'; ?>
--POST--
a[a]=1&a[b]=3
--FILE--
<?php
var_dump($_POST['a']);
?>
--EXPECT--
array(2) {
[u"a"]=>
unicode(1) "1"
[u"b"]=>
unicode(1) "3"
}
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/adv/015.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/adv/015.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/adv/015.phpt
--TEST--
POST Method test and arrays - 3
--SKIPIF--
<?php if (php_sapi_name()=='cli') echo 'skip'; ?>
--POST--
a[]=1&a[0]=5
--FILE--
<?php
var_dump($_POST['a']);
?>
--EXPECT--
array(1) {
[0]=>
unicode(1) "5"
}
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/adv/018.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/adv/018.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/adv/018.phpt
--TEST--
POST Method test and arrays - 6
--SKIPIF--
<?php if (php_sapi_name()=='cli') echo 'skip'; ?>
--POST--
a[][]=1&a[][]=3&b[a][b][c]=1&b[a][b][d]=1
--FILE--
<?php
var_dump($_POST['a']);
var_dump($_POST['b']);
?>
--EXPECT--
array(2) {
[0]=>
array(1) {
[0]=>
unicode(1) "1"
}
[1]=>
array(1) {
[0]=>
unicode(1) "3"
}
}
array(1) {
[u"a"]=>
array(1) {
[u"b"]=>
array(2) {
[u"c"]=>
unicode(1) "1"
[u"d"]=>
unicode(1) "1"
}
}
}
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/adv/024.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/adv/024.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/adv/024.phpt
--TEST--
Test HTTP_RAW_POST_DATA creation
--INI--
magic_quotes_gpc=0
always_populate_raw_post_data=1
--SKIPIF--
<?php if (php_sapi_name()=='cli') echo 'skip'; ?>
--POST--
a=ABC&y=XYZ&c[]=1&c[]=2&c[a]=3
--FILE--
<?php
var_dump($_POST, $HTTP_RAW_POST_DATA);
?>
--EXPECT--
array(3) {
[u"a"]=>
unicode(3) "ABC"
[u"y"]=>
unicode(3) "XYZ"
[u"c"]=>
array(3) {
[0]=>
unicode(1) "1"
[1]=>
unicode(1) "2"
[u"a"]=>
unicode(1) "3"
}
}
unicode(30) "a=ABC&y=XYZ&c[]=1&c[]=2&c[a]=3"
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/adv/019.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/adv/019.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/adv/019.phpt
--TEST--
POST Method test and arrays - 7
--SKIPIF--
<?php if (php_sapi_name()=='cli') echo 'skip'; ?>
--POST--
a[]=1&a[]]=3&a[[]=4
--FILE--
<?php
var_dump($_POST['a']);
?>
--EXPECT--
array(3) {
[0]=>
unicode(1) "1"
[1]=>
unicode(1) "3"
[u"["]=>
unicode(1) "4"
}
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/adv/008.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/adv/008.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/adv/008.phpt
--TEST--
Divide 3 variables and print result
--FILE--
<?php $a=27; $b=3; $c=3; $d=$a/$b/$c; echo $d?>
--EXPECT--
3
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/imgConverter/imageCreator.php?view=markup&rev=1.1
Index:
phpruntests/code-samples/taskScheduler/example3/imgConverter/imageCreator.php
+++
phpruntests/code-samples/taskScheduler/example3/imgConverter/imageCreator.php
<?php
class imageCreator {
private $chars = array();
private $image = NULL;
private $size = 0;
private $pixelGap = 2;
public function __construct(array $chars) {
$this->chars = $chars;
}
public function draw() {
$s = $this->size =
ceil(sqrt(sizeof($this->chars)/3))*$this->pixelGap;
$this->image =
ImageCreateTrueColor($this->size-$this->pixelGap+1,
$this->size-$this->pixelGap+1);
$bg = ImageColorAllocate($this->image, 255, 255, 255);
ImageFill($this->image, 0, 0, $bg);
ImageColorTransparent($this->image, $bg);
$colors = array();
$x = 0;
$y = 0;
for ($i=0; $i<sizeof($this->chars); $i+=3) {
if ($i>0 && $x%$s==0) {
$x = 0;
$y += $this->pixelGap ;
}
$r = $this->chars[$i];
$g = $this->chars[$i+1];
$b = $this->chars[$i+2];
$v = $r.$g.$b;
if (!isset($colors[$v]))
$colors[$v] = ImageColorAllocate($this->image ,
$r*2, $g*2, $b*2);
ImageLine($this->image , $x, $y, $x, $y, $colors[$v]);
$x += $this->pixelGap;
}
// $this->quadSize();
// imageellipse($this->image, $size, $size, $size*2, $size*2,
$bg);
}
public function quadSize() {
$s = $this->size+$this->pixelGap-1;
$img = ImageCreateTrueColor($s*2, $s*2);
$bg = ImageColorAllocate($this->image , 255, 255, 255);
ImageFill($img, 0, 0, $bg);
ImageColorTransparent($img, $bg);
imagecopymerge($img, $this->image, $s, $s, 0, 0, $s, $s, 100);
$tmp = ImageCreateTrueColor($s, $s);
imagecopyresampled($tmp, $this->image, 0, 0, ($s-1), 0, $s, $s,
0-$s, $s);
imagecopymerge($img, $tmp, 0, $s, 0, 0, $s, $s, 100);
imagecopyresampled($tmp, $this->image, 0, 0, 0, ($s-1), $s, $s,
$s, 0-$s);
imagecopymerge($img, $tmp, $s, 0, 0, 0, $s, $s, 100);
imagecopyresampled($tmp, $this->image, 0, 0, ($s-1), ($s-1),
$s, $s, 0-$s, 0-$s);
imagecopymerge($img, $tmp, 0, 0, 0, 0, $s, $s, 100);
$this->image = $img;
}
public function nice() {
$sum = array_sum($this->chars);
$s = ceil(sqrt($sum));
$this->image = ImageCreateTrueColor(sizeof($this->chars)*2,
255);
$bg = ImageColorAllocate($this->image, 255, 255, 255);
ImageFill($this->image, 0, 0, $bg);
ImageColorTransparent($this->image, $bg);
$colors = array();
for ($i=0; $i<sizeof($this->chars); $i++) {
$v = $this->chars[$i]*2;
if (!isset($colors[$v]))
$colors[$v] = ImageColorAllocate($this->image ,
$v, $v, $v);
ImageLine($this->image , $i*2, 255, $i*2, 255-$v,
$colors[$v]);
}
}
public function saveImage($name) {
return ImagePNG($this->image, $name);
}
public function setPixelGap($gap) {
$this->pixelGap = is_numeric($gap) ? $gap+1 : 1;
}
}
?>
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/imgConverter/fileReader.php?view=markup&rev=1.1
Index:
phpruntests/code-samples/taskScheduler/example3/imgConverter/fileReader.php
+++ phpruntests/code-samples/taskScheduler/example3/imgConverter/fileReader.php
<?php
class fileReader {
private $file = NULL;
private $chars = array();
private $trimFile = false;
public function __construct($file) {
$this->file = new SplFileInfo($file);
if ($this->file->isFile() == false)
die($file.' is not a valid file');
}
public function getAsciiChars() {
return $this->chars;
}
public function setTrim($trim) {
$this->trimFile = is_bool($trim) ? $trim : false;
}
public function read() {
$lines = file($this->file->getPathname(),
FILE_IGNORE_NEW_LINES);
foreach ($lines as $line) {
if ($this->trimFile) $line = trim($line);
for ($i=0; $i<strlen($line); $i++) {
$this->chars[] = ord($line{$i});
}
$this->chars[] = 10; // new line
}
}
}
?>
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/imgConverter/fileCreator.php?view=markup&rev=1.1
Index:
phpruntests/code-samples/taskScheduler/example3/imgConverter/fileCreator.php
+++ phpruntests/code-samples/taskScheduler/example3/imgConverter/fileCreator.php
<?php
class fileCreator {
private $chars = array();
private $buffer = '';
public function __construct(array $chars) {
$this->chars = $chars;
}
public function create() {
for ($i=0; $i<sizeof($this->chars); $i++) {
if ($this->chars[$i] != 255) {
$this->buffer.= chr($this->chars[$i]);
}
}
}
public function getBufferString() {
return $this->buffer;
}
public function write($file) {
$f = fopen($file, 'w');
fwrite($f, $this->buffer);
fclose($f);
}
}
?>
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/imgConverter/imageReader.php?view=markup&rev=1.1
Index:
phpruntests/code-samples/taskScheduler/example3/imgConverter/imageReader.php
+++ phpruntests/code-samples/taskScheduler/example3/imgConverter/imageReader.php
<?php
class imageReader {
private $file = NULL;
private $chars = array();
private $size = 0;
private $pixelGap = 2;
public function __construct($file) {
$this->file = new SplFileInfo($file);
if ($this->file->isFile() == false)
throw Exception($file.' is not a valid file');
$info = getimagesize($this->file);
if ($info[0] != $info[1])
throw Exception($file.' has invalid dimensions');
$this->size = $info[0];
if ($info['mime'] != 'image/png')
throw Exception($file.' has to ba a png');
}
public function read() {
$img = ImageCreateFromPNG($this->file);
$x = 0;
$y = 0;
for ($i=0; $i<($this->size*$this->size); $i++) {
if ($i>0 && $x%$this->size==0) {
$x = 0;
$y += $this->pixelGap;
}
$rgb = ImageColorAt($img, $x, $y);
if ($rgb) {
$this->chars[] = (($rgb >> 16) & 0xFF);
$this->chars[] = (($rgb >> 8) & 0xFF);
$this->chars[] = ($rgb & 0xFF);
}
$x += $this->pixelGap;
}
}
public function getAsciiChars() {
return $this->chars;
}
public function setPixelGap($gap) {
$this->pixelGap = is_numeric($gap) ? $gap+1 : 1;
}
}
?>
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/func/007.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/func/007.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/func/007.phpt
--TEST--
INI functions test
--FILE--
<?php
$ini1 = ini_get('include_path');
ini_set('include_path','ini_set_works');
echo ini_get('include_path')."\n";
ini_restore('include_path');
$ini2 = ini_get('include_path');
if ($ini1 !== $ini2) {
echo "ini_restore() does not work.\n";
}
else {
echo "ini_restore_works\n";
}
?>
--EXPECT--
ini_set_works
ini_restore_works
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/func/010.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/func/010.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/func/010.phpt
--TEST--
function with many parameters
--FILE--
<?php
// the stack size + some random constant
$boundary = 64*1024;
$limit = $boundary+42;
function test($a, $b)
{
var_dump($a === $b);
test2($a,$b);
}
function test2($a, $b)
{
if ($a !== $b) {
var_dump("something went wrong: $a !== $b");
}
}
// generate the function
$str = "<?php\nfunction x(";
for($i=0; $i < $limit; ++$i) {
$str .= '$v'.dechex($i).($i===($limit-1) ? '' : ',');
}
$str .= ') {
test($v42, \'42\');
test(\'4000\', $v4000);
test2($v300, \'300\');
test($v0, \'0\'); // first
test($v'.dechex($limit-1).", '".dechex($limit-1).'\'); // last
test($v'.dechex($boundary).", '".dechex($boundary).'\'); //boundary
test($v'.dechex($boundary+1).", '".dechex($boundary+1).'\');
//boundary+1
test($v'.dechex($boundary-1).", '".dechex($boundary-1).'\');
//boundary-1
}';
// generate the function call
$str .= "\n\nx(";
for($i=0; $i< $limit; ++$i) {
$str .= "'".dechex($i)."'".($i===($limit-1) ? '' : ',');
}
$str .= ");\n";
$filename = dirname(__FILE__).'/010-file.php';
file_put_contents(dirname(__FILE__).'/010-file.php', $str);
unset($str);
include($filename);
echo "Done\n";
?>
--CLEAN--
<?php
@unlink(dirname(__FILE__).'/010-file.php');
?>
--EXPECT--
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
Done
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/func/002.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/func/002.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/func/002.phpt
--TEST--
Static variables in functions
--FILE--
<?php
function blah()
{
static $hey=0,$yo=0;
echo "hey=".$hey++.", ",$yo--."\n";
}
blah();
blah();
blah();
if (isset($hey) || isset($yo)) {
echo "Local variables became global :(\n";
}
--EXPECT--
hey=0, 0
hey=1, -1
hey=2, -2
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/func/006.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/func/006.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/func/006.phpt
--TEST--
Output buffering tests
--INI--
output_buffering=0
output_handler=
zlib.output_compression=0
zlib.output_handler=
--FILE--
<?php
ob_start();
echo ob_get_level();
echo 'A';
ob_start();
echo ob_get_level();
echo 'B';
$b = ob_get_contents();
ob_end_clean();
$a = ob_get_contents();
ob_end_clean();
var_dump( $b ); // 2B
var_dump( $a ); // 1A
?>
--EXPECT--
string(2) "2B"
string(2) "1A"
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/func/008.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/func/008.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/func/008.phpt
--TEST--
Test for buffering in core functions with implicit flush off
--INI--
implicit_flush=0
--FILE--
<?php
$res = var_export("foo1");
echo "\n";
$res = var_export("foo2", TRUE);
echo "\n";
echo $res."\n";
?>
--EXPECT--
'foo1'
'foo2'
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/func/005a.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/func/005a.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/func/005a.phpt
--TEST--
Testing register_shutdown_function() with timeout. (Bug: #21513)
--FILE--
<?php
ini_set('display_errors', 0);
echo "Start\n";
function boo()
{
echo "Shutdown\n";
}
register_shutdown_function("boo");
/* not necessary, just to show the error sooner */
set_time_limit(1);
/* infinite loop to simulate long processing */
for (;;) {}
echo "End\n";
?>
--EXPECT--
Start
Shutdown
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/func/005.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/func/005.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/func/005.phpt
--TEST--
Testing register_shutdown_function()
--FILE--
<?php
function foo()
{
print "foo";
}
register_shutdown_function("foo");
print "foo() will be called on shutdown...\n";
?>
--EXPECT--
foo() will be called on shutdown...
foo
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/func/003.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/func/003.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/func/003.phpt
--TEST--
General function test
--FILE--
<?php
function a()
{
echo "hey\n";
}
function b($i)
{
echo "$i\n";
}
function c($i,$j)
{
echo "Counting from $i to $j\n";
for ($k=$i; $k<=$j; $k++) {
echo "$k\n";
}
}
a();
b("blah");
a();
b("blah","blah");
c(7,14);
a();
function factorial($n)
{
if ($n==0 || $n==1) {
return 1;
} else {
return factorial($n-1)*$n;
}
}
function factorial2($start, $n)
{
if ($n<=$start) {
return $start;
} else {
return factorial2($start,$n-1)*$n;
}
}
for ($k=0; $k<10; $k++) {
for ($i=0; $i<=10; $i++) {
$n=factorial($i);
echo "factorial($i) = $n\n";
}
}
echo "and now, from a function...\n";
function call_fact()
{
echo "(it should break at 5...)\n";
for ($i=0; $i<=10; $i++) {
if ($i == 5) break;
$n=factorial($i);
echo "factorial($i) = $n\n";
}
}
function return4() { return 4; }
function return7() { return 7; }
for ($k=0; $k<10; $k++) {
call_fact();
}
echo "------\n";
$result = factorial(factorial(3));
echo "$result\n";
$result=factorial2(return4(),return7());
echo "$result\n";
function andi($i, $j)
{
for ($k=$i ; $k<=$j ; $k++) {
if ($k >5) continue;
echo "$k\n";
}
}
andi (3,10);
--EXPECT--
hey
blah
hey
blah
Counting from 7 to 14
7
8
9
10
11
12
13
14
hey
factorial(0) = 1
factorial(1) = 1
factorial(2) = 2
factorial(3) = 6
factorial(4) = 24
factorial(5) = 120
factorial(6) = 720
factorial(7) = 5040
factorial(8) = 40320
factorial(9) = 362880
factorial(10) = 3628800
factorial(0) = 1
factorial(1) = 1
factorial(2) = 2
factorial(3) = 6
factorial(4) = 24
factorial(5) = 120
factorial(6) = 720
factorial(7) = 5040
factorial(8) = 40320
factorial(9) = 362880
factorial(10) = 3628800
factorial(0) = 1
factorial(1) = 1
factorial(2) = 2
factorial(3) = 6
factorial(4) = 24
factorial(5) = 120
factorial(6) = 720
factorial(7) = 5040
factorial(8) = 40320
factorial(9) = 362880
factorial(10) = 3628800
factorial(0) = 1
factorial(1) = 1
factorial(2) = 2
factorial(3) = 6
factorial(4) = 24
factorial(5) = 120
factorial(6) = 720
factorial(7) = 5040
factorial(8) = 40320
factorial(9) = 362880
factorial(10) = 3628800
factorial(0) = 1
factorial(1) = 1
factorial(2) = 2
factorial(3) = 6
factorial(4) = 24
factorial(5) = 120
factorial(6) = 720
factorial(7) = 5040
factorial(8) = 40320
factorial(9) = 362880
factorial(10) = 3628800
factorial(0) = 1
factorial(1) = 1
factorial(2) = 2
factorial(3) = 6
factorial(4) = 24
factorial(5) = 120
factorial(6) = 720
factorial(7) = 5040
factorial(8) = 40320
factorial(9) = 362880
factorial(10) = 3628800
factorial(0) = 1
factorial(1) = 1
factorial(2) = 2
factorial(3) = 6
factorial(4) = 24
factorial(5) = 120
factorial(6) = 720
factorial(7) = 5040
factorial(8) = 40320
factorial(9) = 362880
factorial(10) = 3628800
factorial(0) = 1
factorial(1) = 1
factorial(2) = 2
factorial(3) = 6
factorial(4) = 24
factorial(5) = 120
factorial(6) = 720
factorial(7) = 5040
factorial(8) = 40320
factorial(9) = 362880
factorial(10) = 3628800
factorial(0) = 1
factorial(1) = 1
factorial(2) = 2
factorial(3) = 6
factorial(4) = 24
factorial(5) = 120
factorial(6) = 720
factorial(7) = 5040
factorial(8) = 40320
factorial(9) = 362880
factorial(10) = 3628800
factorial(0) = 1
factorial(1) = 1
factorial(2) = 2
factorial(3) = 6
factorial(4) = 24
factorial(5) = 120
factorial(6) = 720
factorial(7) = 5040
factorial(8) = 40320
factorial(9) = 362880
factorial(10) = 3628800
and now, from a function...
(it should break at 5...)
factorial(0) = 1
factorial(1) = 1
factorial(2) = 2
factorial(3) = 6
factorial(4) = 24
(it should break at 5...)
factorial(0) = 1
factorial(1) = 1
factorial(2) = 2
factorial(3) = 6
factorial(4) = 24
(it should break at 5...)
factorial(0) = 1
factorial(1) = 1
factorial(2) = 2
factorial(3) = 6
factorial(4) = 24
(it should break at 5...)
factorial(0) = 1
factorial(1) = 1
factorial(2) = 2
factorial(3) = 6
factorial(4) = 24
(it should break at 5...)
factorial(0) = 1
factorial(1) = 1
factorial(2) = 2
factorial(3) = 6
factorial(4) = 24
(it should break at 5...)
factorial(0) = 1
factorial(1) = 1
factorial(2) = 2
factorial(3) = 6
factorial(4) = 24
(it should break at 5...)
factorial(0) = 1
factorial(1) = 1
factorial(2) = 2
factorial(3) = 6
factorial(4) = 24
(it should break at 5...)
factorial(0) = 1
factorial(1) = 1
factorial(2) = 2
factorial(3) = 6
factorial(4) = 24
(it should break at 5...)
factorial(0) = 1
factorial(1) = 1
factorial(2) = 2
factorial(3) = 6
factorial(4) = 24
(it should break at 5...)
factorial(0) = 1
factorial(1) = 1
factorial(2) = 2
factorial(3) = 6
factorial(4) = 24
------
720
840
3
4
5
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/func/004.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/func/004.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/func/004.phpt
--TEST--
General function test
--FILE--
<?php
echo "Before function declaration...\n";
function print_something_multiple_times($something,$times)
{
echo "----\nIn function, printing the string \"$something\" $times times\n";
for ($i=0; $i<$times; $i++) {
echo "$i) $something\n";
}
echo "Done with function...\n-----\n";
}
function some_other_function()
{
echo "This is some other function, to ensure more than just one function
works fine...\n";
}
echo "After function declaration...\n";
echo "Calling function for the first time...\n";
print_something_multiple_times("This works!",10);
echo "Returned from function call...\n";
echo "Calling the function for the second time...\n";
print_something_multiple_times("This like, really works and stuff...",3);
echo "Returned from function call...\n";
some_other_function();
?>
--EXPECT--
Before function declaration...
After function declaration...
Calling function for the first time...
----
In function, printing the string "This works!" 10 times
0) This works!
1) This works!
2) This works!
3) This works!
4) This works!
5) This works!
6) This works!
7) This works!
8) This works!
9) This works!
Done with function...
-----
Returned from function call...
Calling the function for the second time...
----
In function, printing the string "This like, really works and stuff..." 3 times
0) This like, really works and stuff...
1) This like, really works and stuff...
2) This like, really works and stuff...
Done with function...
-----
Returned from function call...
This is some other function, to ensure more than just one function works fine...
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/func/001.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/func/001.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/func/001.phpt
--TEST--
Strlen() function test
--FILE--
<?php echo strlen("abcdef")?>
--EXPECT--
6
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/func/009.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/func/009.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/func/009.phpt
--TEST--
Test for buffering in core functions with implicit flush on
--INI--
implicit_flush=1
--FILE--
<?php
$res = var_export("foo1");
echo "\n";
$res = var_export("foo2", TRUE);
echo "\n";
echo $res."\n";
?>
--EXPECT--
'foo1'
'foo2'
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/basic/007.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/basic/007.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/basic/007.phpt
--TEST--
Multiply 3 variables and print result
--FILE--
<?php $a=2; $b=4; $c=8; $d=$a*$b*$c; echo $d?>
--EXPECT--
64
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/basic/006.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/basic/006.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/basic/006.phpt
--TEST--
Add 3 variables together and print result
--FILE--
<?php $a=1; $b=2; $c=3; $d=$a+$b+$c; echo $d?>
--EXPECT--
6
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/basic/001.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/basic/001.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/basic/001.phpt
--TEST--
Trivial "Hello World" test
--FILE--
<?php echo "Hello World"?>
--EXPECT--
Hello World
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/basic/004.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/basic/004.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/basic/004.phpt
--TEST--
Two variables in POST data
--SKIPIF--
<?php if (php_sapi_name()=='cli') echo 'skip'; ?>
--POST--
a=Hello+World&b=Hello+Again+World
--FILE--
<?php
error_reporting(0);
echo "{$_POST['a']} {$_POST['b']}" ?>
--EXPECT--
Hello World Hello Again World
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/basic/003.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/basic/003.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/basic/003.phpt
--TEST--
GET and POST Method combined
--SKIPIF--
<?php if (php_sapi_name()=='cli') echo 'skip'; ?>
--POST--
a=Hello+World
--GET--
b=Hello+Again+World&c=Hi+Mom
--FILE--
<?php
error_reporting(0);
echo "post-a=({$_POST['a']}) get-b=({$_GET['b']}) get-c=({$_GET['c']})"?>
--EXPECT--
post-a=(Hello World) get-b=(Hello Again World) get-c=(Hi Mom)
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/basic/005.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/basic/005.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/basic/005.phpt
--TEST--
Three variables in POST data
--SKIPIF--
<?php if (php_sapi_name()=='cli') echo 'skip'; ?>
--POST--
a=Hello+World&b=Hello+Again+World&c=1
--FILE--
<?php
error_reporting(0);
echo "{$_POST['a']} {$_POST['b']} {$_POST['c']}"?>
--EXPECT--
Hello World Hello Again World 1
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/files/src/basic/002.phpt?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/files/src/basic/002.phpt
+++ phpruntests/code-samples/taskScheduler/example3/files/src/basic/002.phpt
--TEST--
Simple POST Method test
--SKIPIF--
<?php if (php_sapi_name()=='cli') echo 'skip'; ?>
--POST--
a=Hello+World
--FILE--
<?php
echo $_POST['a']; ?>
--EXPECT--
Hello World
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example1/main.php?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example1/main.php
+++ phpruntests/code-samples/taskScheduler/example1/main.php
<?php
include 'taskCalculate.php';
function createTaskList()
{
$list = array();
for ($i=0; $i<rand(128,256); $i++) {
$num = array();
for ($j=0; $j<rand(32,64); $j++) {
$num[$j] = rand(0,9);
}
$list[$i] = new taskCalculate($num);
}
return $list;
}
?>
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example1/taskCalculate.php?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example1/taskCalculate.php
+++ phpruntests/code-samples/taskScheduler/example1/taskCalculate.php
<?php
class taskCalculate extends task implements taskInterface
{
private $numbers = array();
private $result = 0;
public function __construct(array $numbers)
{
$this->numbers = $numbers;
}
public function run()
{
$r = 0;
foreach($this->numbers as $num) {
$num = (int)$num;
$r += $num;
}
if ($r%26 == 0) {
$this->setMessage("just an example");
return false;
}
$this->result = $r;
return true;
}
public function getResult()
{
return $this->result;
}
}
?>
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/taskConvert.php?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/taskConvert.php
+++ phpruntests/code-samples/taskScheduler/example3/taskConvert.php
<?php
class taskConvert extends task implements taskInterface
{
private $sourceFile = NULL;
public function __construct($sourceFile)
{
$this->sourceFile = $sourceFile;
}
public function run()
{
if (is_null($this->sourceFile)) {
$this->setState(self::FAIL);
$this->setMessage('no source file');
return false;
}
$reader = new
fileReader('example3/files/src'.$this->sourceFile);
$reader->read();
$chars = $reader->getAsciiChars();
$n = 'example3/files/dest'.$this->sourceFile.'.png';
$img = new imageCreator($chars);
$img->draw();
$img->saveImage($n);
return true;
}
}
?>
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example3/main.php?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example3/main.php
+++ phpruntests/code-samples/taskScheduler/example3/main.php
<?php
include 'taskConvert.php';
include 'imgConverter/fileCreator.php';
include 'imgConverter/fileReader.php';
include 'imgConverter/imageCreator.php';
include 'imgConverter/imageReader.php';
function createTaskList()
{
return readSource('example3/files');
}
function readSource($base, $path=NULL)
{
$files = array();
foreach (new DirectoryIterator($base.'/src/'.$path) as $file) {
if ($file->isDot()) continue;
$name = $file->getFileName();
if (substr($name,0,1) == '.') continue;
if ($file->isDir()) {
$dest = $base.'/dest'.$path.'/'.$name;
if (!file_exists($dest)) {
mkdir($dest);
chmod($dest, 0777);
}
$files[] = readSource($base, $path.'/'.$name);
}
elseif ($file->isFile()) {
$files[] = new taskConvert($path.'/'.$name);
}
}
return $files;
}
?>
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/run.php?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/run.php
+++ phpruntests/code-samples/taskScheduler/run.php
<?php
include 'classes/taskScheduler.php';
include 'classes/taskInterface.php';
include 'classes/task.php';
// logger
date_default_timezone_set("Europe/Berlin");
function logg($msg) {
$debug = false;
if ($debug) {
print '['.date('h:i:s').'] '.$msg."\n";
flush();
}
}
// arguments
$argc = sizeof($argv);
if ($argc == 2 || $argc == 3) {
$src = $argv[1];
$count = isset($argv[2]) ? $argv[2] : NULL;
} else {
die("USAGE: php run.php example processCount\n");
}
// include exmaple & create task-list
$src = $src.'/main.php';
if (!file_exists($src)) {
die("invalid example\n");
}
include $src;
$taskList = createTaskList();
// init scheduler
$c = new taskScheduler();
$c->setTaskList($taskList);
$c->setProcessCount($count);
$c->run();
$c->printStatistic();
// var_dump($c->getTaskList());
$c->printFailedTasks();
exit(0);
?>
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example2/taskSleep.php?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example2/taskSleep.php
+++ phpruntests/code-samples/taskScheduler/example2/taskSleep.php
<?php
class taskSleep extends task implements taskInterface
{
private $sleep = 0;
public function __construct($sleep)
{
$this->sleep = $sleep;
}
public function run()
{
sleep($this->sleep);
return true;
}
}
?>
http://cvs.php.net/viewvc.cgi/phpruntests/code-samples/taskScheduler/example2/main.php?view=markup&rev=1.1
Index: phpruntests/code-samples/taskScheduler/example2/main.php
+++ phpruntests/code-samples/taskScheduler/example2/main.php
<?php
include 'taskSleep.php';
function createTaskList()
{
$list = array();
for ($i=0; $i<10; $i++) {
$list[$i] = new taskSleep($i%3);
}
return $list;
}
?>
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php