示例#1
0
文件: pen.php 项目: antixrist/Common
function CLI_squat_go()
{
    while (true) {
        $lexeme = array('buy' => '[buy|kupi|kupiti|pokupay]', 'pen' => '[pen|pencil|ru4ka|ruchka]', 'tld' => '[ru|org|com|net]');
        $default = (include OTHER_ROOT . '/generator.db');
        $domain = generator('@rotate({[@buy|(0.3)]}{@pen}).@tld', $default + $lexeme);
        if (WhoIs::lookup($domain)) {
        } else {
            echo $domain, chr(10);
        }
    }
}
示例#2
0
<?php

## Исследуем yield.
function generator()
{
    echo "перед первым yield<br />";
    (yield 1);
    echo "перед вторым yield<br />";
    (yield 2);
    echo "перед третьим yield<br />";
    (yield 3);
    echo "после третьего yield<br />";
}
foreach (generator() as $i) {
    echo "{$i}<br />";
}
/**
 * Функция отправляет письма
 */
function sendMail()
{
    // Явное указание на использование глобальных переменных
    global $localhostPath, $dbConnect, $prefix, $maxMailSend, $maxMailSendInDay, $log, $timeout;
    // Устанавливаем значение "по умолчанию" переменной статуса завершения функции
    $status = false;
    // Формирвоание текста сообщения о наличии файла "stop.txt"
    $stopFileExistlogMessage = date('d.m.Y H:i:s') . ": Выполнение предыдущей версии скрипта еще не завершено!";
    // Формирвоание текста сообщения о наличии файла "gotLimit.txt"
    $gotlimitFileExistlogMessage = date('d.m.Y H:i:s') . ": Достигнут суточный лимит отправляемых писем. Рассылку необходимо возобновить вручную через 24 часа!";
    // Если файла "gotLimit.txt" на сервере нет
    // Если файла "stop.txt" на сервере нет
    // Если соединение с БД установлено
    // И параметры скрипта переопределены
    // И максимальное количество отправляемых за раз писем не равно 0
    if (!checkFileExists('gotLimit.txt', $gotlimitFileExistlogMessage) && !checkFileExists('stop.txt', $stopFileExistlogMessage) && dbConnect() && setParams() && $maxMailSend !== 0) {
        // Создаем файл "stop.txt"
        createFile('stop.txt', 'stop');
        // Если есть активные почтовые рассылки, получаем параметры первой активной рассылки
        if ($mail = getMailingGroup()) {
            // Добавляем сообщение о начале работы скрипта в массив лога
            $log[] = date('d.m.Y H:i:s') . ": Начало работы скрипта!";
            // Получение списка адресатов, кому были отправлены письма
            $whoSent = $mail['whoSent'] ? explode(',', $mail['whoSent']) : array();
            // Получаем массив категорий материалов рассылки
            $categories = $mail['categories'] ? array_diff(explode(',', $mail['categories']), array('', ' ', null)) : array();
            // Получаем количество отправленных писем из отчера за предыдущий день
            $sendedYesterday = getYesterdayReportData();
            // Определение количества отправленных писем
            $sendedInAllTime = $mail['log'] > count($whoSent) ? $mail['log'] : count($whoSent);
            // Подсчитываем, сколько еще можно отправить писем за этот день, не превышая лимитов хостинга
            $needToSend = $maxMailSendInDay + $sendedYesterday - $sendedInAllTime;
            // Переопределение максимального количества отправляемых за раз писем
            $maxMailSend = $needToSend >= $maxMailSend ? $maxMailSend : $needToSend;
            // Если не достигнут суточный лимит количества отправляемых писем
            if ($needToSend > 0) {
                // Получение списка подписчиков активной рассылки
                $subscribers = getSubscribers($categories, $mail['log']);
                // Если массив подписчиков не пуст
                if (!empty($subscribers)) {
                    // Закрываем текущее соединение с БД, во избежание зазрыва соединения по таймауту
                    mysql_close($dbConnect);
                    // Обход массива подписчиков
                    foreach ($subscribers as $subscriber) {
                        // Если количество отправленных писем меньше максимального количества отправляемых писем за раз
                        // И подписчику еще не отправлялось письмо
                        if ($countMailSend < $maxMailSend && !in_array($subscriber['email'], $whoSent)) {
                            // Установка временного интервала между отправками писем в 10 секунд
                            sleep($timeout);
                            // Определение значения по умолчанию сгенерированной строки, добавляемой к телу письма
                            $generatorStr = '';
                            // Если параметр "Подключать словарь генерации случайного текста?" рассылки установлен в позицию "Да"
                            if ($mail['generator'] == 1) {
                                // Получение сгенерированной строки случайного текста
                                $generator = generator();
                                // Если строка не сгенерирована
                                if (!$generator) {
                                    // Переход к следующей итерации цикла
                                    continue;
                                }
                                // Добавляем сгенерированную строчку случайного текста
                                $generatorStr = $generator;
                            }
                            /* --------- Генерация письма -------- */
                            // Тема письма
                            $subject = $mail['subject'];
                            // Формируем тело письма для отправки
                            // Подставляем Имя пльзователя в тело в шаблон письма если есть маркер -{fio}-
                            $body = str_replace('-{fio}-', $subscriber['fio'], $mail['textemail']);
                            // Подставляем Email пльзователя в тело в шаблон письма если есть маркер -{fio}-
                            $body = str_replace('-{email}-', $subscriber['email'], $body);
                            // Добавление сгенерированной строки к телу письма
                            $body .= $generatorStr;
                            // Формируем заголовок письма
                            $headers = "MIME-Version: 1.0\r\n";
                            $headers .= "Content-type: text/html; charset=utf-8\r\n";
                            $headers .= "From: " . $mail['myemail'] . "\r\n";
                            $headers .= "Reply-To: " . $mail['myemail'] . "\r\n";
                            /* --------- Отправка письма -------- */
                            // Отправка письма адресату
                            $sendingMail = mail($subscriber['email'], $subject, $body, $headers);
                            /* --------- Проверка результата операции отправки -------- */
                            // Если письмо успешно отправлено
                            if ($sendingMail) {
                                // Добавляем E-mail адрес подписчика в массив адресатов, кому уже отправлены письма
                                $whoSent[] = $subscriber['email'];
                                // Формируем запрос на обновление списка отправленных у подписчика
                                $updateSubscriberInfo[] = "(" . $subscriber['id'] . ", '" . addslashes($subscriber['downloadedDocs'] . "\r\n" . $mail['id'] . ". " . $mail['subject'] . " (" . date('H:i:s d.m.y') . ")") . "')";
                                $log[] = 'Письмо c id=' . $mail['id'] . ' успешно отправлено адресату ' . $subscriber['email'];
                            } else {
                                // Добавляем сообщение об ошибке в массив лога ошибок
                                $log[] = 'Письмо c id=' . $mail['id'] . ' не отправлено на е-mail ' . $subscriber['email'];
                            }
                            // Удаление переменных
                            unset($body, $subject, $header);
                            // Увеличиваем общий счетчик отправленных писем на единицу
                            $countMailSend++;
                        } else {
                            // Переход к следующей итерации цикла
                            continue;
                        }
                    }
                    // Формируем запрос в БД на обновление информации о рассылке
                    $query = "UPDATE `" . $prefix . "subscribers_emails` SET  `log`=" . ($mail['log'] + $countMailSend) . ", `whoSent`='" . implode(',', $whoSent) . "', `noteMail`='" . $mail['noteMail'] . "\r\n" . date('H:i:s d.m.Y') . ":Отправлено всего на " . count($whoSent) . " e-mail адресов' WHERE `id`=" . $mail['id'];
                } else {
                    // Формируем запрос в БД на обновление информации о рассылке
                    $query = "UPDATE `" . $prefix . "subscribers_emails` SET `log`=0, `published`=-1, `send_date`='" . date('Y-m-d H:i:s') . "', `whoSent`='" . implode(',', $whoSent) . "', `noteMail`='" . $mail['noteMail'] . "\r\n" . date('H:i:s d.m.Y') . ":Отправлено всего на " . count($whoSent) . " e-mail адресов' WHERE `id`=" . $mail['id'];
                }
                // Восстанавливаем отключенное ранее соединение с БД
                dbConnect();
                // Отправка запроса в БД и получение результата
                $resultToDb = mysql_query($query, $dbConnect);
                // Если последняя операция MySQL вернула сообщение об ошибке (не пустую строку)
                if (!$resultToDb) {
                    // Добавленеи сообщения об ошибках операции в MySQL в массив лога ошибок
                    $log[] = "MySQL query error: " . mysql_error() . ' (' . $query . ')';
                }
                // Если массив запросов на обновление списка отправленных материалов подписчику не пустой
                if ($updateSubscriberInfo) {
                    // Преобразовываем массив в строку
                    $updateSubscriberInfo = implode(',', $updateSubscriberInfo);
                    // Формируем строку запроса в БД на внесение изменений в данные подписчиков в БД
                    $updateSubscriberInfo = 'INSERT INTO `' . $prefix . 'subscribers` (`id`, `downloadedDocs`) VALUES' . $updateSubscriberInfo . ' ON DUPLICATE KEY UPDATE `downloadedDocs` = VALUES(`downloadedDocs`)';
                    // Отправка запроса в БД и получение результата
                    $res = mysql_query($updateSubscriberInfo, $dbConnect);
                    if (!$res) {
                        // Добавленеи сообщения об ошибках операции в MySQL в массив лога ошибок
                        $log[] = "MySQL query error: " . mysql_error() . ' (' . $query . ')';
                    }
                }
            } else {
                // Добавленеи сообщение о достижении суточного лимита в массив лога ошибок
                $log[] = "Достигнут суточный лимит отправляемых писем. Рассылка будет возобновлена завтра!";
                // Проверяем, существует ли файл "dayReport.txt" на сервере
                if (file_exists($localhostPath . 'dayReport.txt')) {
                    // Удаление файла "dayReport.txt"
                    unlink($localhostPath . 'dayReport.txt');
                }
                // Вызываем функцию создания файла отчета об общем количестве отправленных писем по текущей рассылке
                createFile('dayReport.txt', count($whoSent));
                // Вызываем функцию создания файла
                createFile('gotLimit.txt', 'true');
            }
            // Добавляем сообщение об окончании работы скрипта в массив лога
            $log[] = date('d.m.Y H:i:s') . ": Завершение работы скрипта!";
        } else {
            // Добавляем сообщение об окончании работы скрипта в массив лога
            $log[] = date('d.m.Y H:i:s') . ": Рассылка не ведется! Нет активных почтовых рассылок!";
        }
        // Удаление файла "stop"
        unlink($localhostPath . 'stop.txt');
        // Устанавливаем значение переменной статуса завершения функции
        $status = true;
    }
    // Закрываем текущее соединение с БД
    mysql_close($dbConnect);
    // Записываем логи в файл
    writeToLog();
    // Завершаем выполнение работы скрипта. Выходим из функции
    return $status;
}
<?php

function generator()
{
    (yield "A");
    (yield "B");
    (yield "C");
}
foreach (generator() as $value) {
    echo $value, "\n";
}
<?php

function generator()
{
    echo (yield 5);
    echo (yield 6);
}
$gen = generator();
$current = $gen->current();
while ($gen->valid()) {
    $current = $gen->send($current * 2);
}
示例#6
0
        if (@rename($dir_fs_document_root . $admin_dir_name, $dir_fs_document_root . 'admin' . $rand_str)) {
            $admin_dir_name = 'admin' . $rand_str;
        }
    }
    $enable_ssl = isset($_POST['ENABLE_SSL']) && $_POST['ENABLE_SSL'] == 'true' ? 'true' : 'false';
    $http_cookie_domain = $_POST['HTTP_COOKIE_DOMAIN'];
    $http_cookie_path = $_POST['HTTP_COOKIE_PATH'];
    $http_url = parse_url(urldecode($_POST['HTTP_WWW_ADDRESS']));
    $http_server = $http_url['scheme'] . '://' . $http_url['host'];
    $http_catalog = $http_url['path'];
    if (isset($http_url['port']) && !empty($http_url['port'])) {
        $http_server .= ':' . $http_url['port'];
    }
    //    $http_server .= '/';
    $https_server = $enable_ssl == 'true' ? str_replace('http://', 'https://', $http_server) : '';
    $https_cookie_domain = $enable_ssl == 'true' ? $http_cookie_domain : '';
    $https_cookie_path = $enable_ssl == 'true' ? $http_cookie_path : '';
    if (substr($http_catalog, -1) != '/') {
        $http_catalog .= '/';
    }
    //    $http_catalog = ltrim($http_catalog, '/');
    $file_contents = '<?php' . "\n" . '////////////////////////////////////////////////////////////////////////////////' . "\n" . '// project    : XOS-Shop, open source e-commerce system' . "\n" . '//              http://www.xos-shop.com' . "\n" . '//' . "\n" . '// filename   : configure.php' . "\n" . '// author     : Hanspeter Zeller <*****@*****.**>' . "\n" . '// copyright  : Copyright (c) 2014 Hanspeter Zeller' . "\n" . '// license    : This file is part of XOS-Shop.' . "\n" . '//' . "\n" . '//              XOS-Shop is free software: you can redistribute it and/or modify' . "\n" . '//              it under the terms of the GNU General Public License as published' . "\n" . '//              by the Free Software Foundation, either version 3 of the License,' . "\n" . '//              or (at your option) any later version.' . "\n" . '//' . "\n" . '//              XOS-Shop is distributed in the hope that it will be useful,' . "\n" . '//              but WITHOUT ANY WARRANTY; without even the implied warranty of' . "\n" . '//              MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the' . "\n" . '//              GNU General Public License for more details.' . "\n" . '//' . "\n" . '//              You should have received a copy of the GNU General Public License' . "\n" . '//              along with XOS-Shop.  If not, see <http://www.gnu.org/licenses/>.' . "\n" . '////////////////////////////////////////////////////////////////////////////////' . "\n" . '' . "\n" . '// Define the webserver and path parameters' . "\n" . '// * DIR_FS_* = Filesystem directories (local/physical)' . "\n" . '// * DIR_WS_* = Webserver directories (virtual/URL)' . "\n" . '  define(\'HTTP_SERVER\', \'' . $http_server . '\'); // eg, http://localhost - should not be empty for productive servers' . "\n" . '  define(\'HTTPS_SERVER\', \'' . $https_server . '\'); // eg, https://localhost - should not be empty for productive servers' . "\n" . '  define(\'ENABLE_SSL\', \'' . $enable_ssl . '\'); // secure webserver' . "\n" . '  define(\'HTTP_COOKIE_DOMAIN\', \'' . $http_cookie_domain . '\');' . "\n" . '  define(\'HTTPS_COOKIE_DOMAIN\', \'' . $https_cookie_domain . '\');' . "\n" . '  define(\'HTTP_COOKIE_PATH\', \'' . $http_cookie_path . '\');' . "\n" . '  define(\'HTTPS_COOKIE_PATH\', \'' . $https_cookie_path . '\');' . "\n" . '' . "\n" . '  define(\'DIR_WS_CATALOG\', \'' . $http_catalog . '\');' . "\n" . '  define(\'DIR_WS_ADMIN\', DIR_WS_CATALOG . \'' . $admin_dir_name . '/\');' . "\n" . '  define(\'DIR_WS_IMAGES\', \'images/\');' . "\n" . '  define(\'DIR_WS_ICONS\', DIR_WS_IMAGES . \'icons/\');' . "\n" . '  define(\'DIR_WS_CATALOG_IMAGES\', DIR_WS_CATALOG . \'images/\');' . "\n" . '  define(\'DIR_WS_ADMIN_IMAGES\', DIR_WS_CATALOG . \'images/admin/templates/\');' . "\n" . '  define(\'DIR_WS_INCLUDES\', \'includes/\');' . "\n" . '  define(\'DIR_WS_BOXES\', DIR_WS_INCLUDES . \'boxes/\');' . "\n" . '  define(\'DIR_WS_FUNCTIONS\', DIR_WS_INCLUDES . \'functions/\');' . "\n" . '  define(\'DIR_WS_CLASSES\', DIR_WS_INCLUDES . \'classes/\');' . "\n" . '  define(\'DIR_WS_MODULES\', DIR_WS_INCLUDES . \'modules/\');' . "\n" . '  define(\'DIR_WS_DOWNLOAD_PUBLIC\', \'pub/\');' . "\n" . '  define(\'DIR_FS_DOCUMENT_ROOT\', \'' . $dir_fs_document_root . '\'); // where the pages are located on the server' . "\n" . '  define(\'DIR_FS_ADMIN\', DIR_FS_DOCUMENT_ROOT . \'' . $admin_dir_name . '/\'); // absolute pate required' . "\n" . '  define(\'DIR_FS_CATALOG\', DIR_FS_DOCUMENT_ROOT); // absolute path required' . "\n" . '  define(\'DIR_FS_BACKUP\', DIR_FS_ADMIN . \'backups/\');' . "\n" . '  define(\'DIR_FS_CATALOG_IMAGES\', DIR_FS_CATALOG . \'images/\');' . "\n" . '  define(\'DIR_FS_CATALOG_MODULES\', DIR_FS_CATALOG . \'includes/modules/\');' . "\n" . '  define(\'DIR_FS_DOWNLOAD\', DIR_FS_CATALOG . \'download/\');' . "\n" . '  define(\'DIR_FS_DOWNLOAD_PUBLIC\', DIR_FS_CATALOG . \'pub/\');' . "\n" . '  define(\'DIR_FS_SMARTY\', DIR_FS_CATALOG . \'smarty/\');' . "\n" . '  define(\'DIR_FS_TMP\', DIR_FS_ADMIN . \'tmp/\');' . "\n" . '' . "\n" . '  define(\'ADMIN_DIR_NAME\', \'' . ($admin_dir_name === 'admin' ? 'default_dir_name' : $admin_dir_name) . '\');' . "\n" . '' . "\n" . '  define(\'KEY\', \'' . generator(60) . '\');' . "\n" . '' . "\n" . '// define our database connection' . "\n" . '  define(\'DB_SERVER\', \'' . $_POST['DB_SERVER'] . '\'); // eg, localhost - should not be empty for productive servers' . "\n" . '  define(\'DB_SERVER_USERNAME\', \'' . $_POST['DB_SERVER_USERNAME'] . '\');' . "\n" . '  define(\'DB_SERVER_PASSWORD\', \'' . $_POST['DB_SERVER_PASSWORD'] . '\');' . "\n" . '  define(\'DB_DATABASE\', \'' . $_POST['DB_DATABASE'] . '\');' . "\n" . '  define(\'USE_PCONNECT\', \'' . ($_POST['USE_PCONNECT'] == 'true' ? 'true' : 'false') . '\'); // use persistent connections?' . "\n" . '  define(\'STORE_SESSIONS\', \'' . ($_POST['STORE_SESSIONS'] == 'files' ? '' : 'mysql') . '\'); // leave empty \'\' for default handler or set to \'mysql\'' . "\n" . '?>';
    $fp = fopen($dir_fs_document_root . 'includes/configure.php', 'w');
    fputs($fp, $file_contents);
    fclose($fp);
    @chmod($dir_fs_document_root . 'includes/configure.php', 0644);
    $smarty->assign(array('href_link_catalog' => $http_server . $http_catalog . 'index.php?lnc=' . $_POST['language_code'], 'href_link_admin' => $http_server . $http_catalog . $admin_dir_name . '/index.php?lnc=' . $_POST['language_code']));
}
$output_install_6 = $smarty->fetch('install_6.tpl');
$smarty->clearAssign(array('form_begin', 'form_end', 'db_error', 'dir_fs_document_root', 'admin_dir_name', 'href_link_catalog', 'href_link_admin', 'href_link_index', 'hidden_fields'));
$smarty->assign('install_inner_content', $output_install_6);
< html >
< body >
< h1 > generator_test.php < /h1 >
<?php 
require_once 'otp.php';
require_once 'random_utils.php';
require_once 'nutils.php';
echo "Generator Test", "<BR><BR>";
$time1 = time();
$result = generator();
$time2 = time();
echo "<BR>";
echo "elapsed time = ", $time2 - $time1, " seconds.<BR>";
echo "Generated ", count($result), " user OTP's<BR>";
echo "<BR>";
echo "Result of applying hash to OTP #1 (", $result[0], ")<BR>";
echo "hex version of OTP #1 = ", ivcs_transform_from(explode(" ", $result[0])), "<BR>";
//echo "hash of ",strtolower(ivcs_transform_from(explode(" ",$result[0])))," = " , __cn_hash(sha1(strtolower(ivcs_transform_from(explode(" ",$result[0]))))),"<BR>";
echo "hash of ", ivcs_transform_from(explode(" ", $result[0])), " = ", __cn_hash(sha1(ivcs_transform_from(explode(" ", $result[0])))), "<BR>";
echo "<BR>symmetry test<BR>";
echo "1st OTP from generator = ", $result[0], "<BR>";
$hex = ivcs_transform_from(explode(" ", $result[0]));
echo "Hex result from ivcs_transform_from = ", $hex, "<BR>";
$six = ivcs_transform_to($hex);
echo "Re-encoding result from ivcs_transform_to ", implode(" ", $six), "<BR>";
echo "<BR>";
echo "<BR>";
echo "Test of OTP table : <BR>";
$index = 1;
$lastHash = __cn_hash(sha1(ivcs_transform_from(explode(" ", $result[0]))));
$numfailed = 0;
示例#8
0
     print "<p class=\"er\">" . $lang['er_05'] . "</p>";
 } elseif (preg_match("/^[a-z0-9_.-]{1,20}@(([a-z0-9-]+\\.)+(com|net|org|mil|edu|gov|arpa|info|biz|[a-z]{2})|[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3})\$/is", $email)) {
     $sql = 'SELECT `login`, `pass`, `status` FROM `users` WHERE `mail` = "' . $email . '" AND `login` = "' . $ulogin . '" LIMIT 1';
     $rs = mysql_query($sql);
     $a = mysql_fetch_array($rs);
     $s = $a['status'];
     if (!$a) {
         print '<p class="er">' . $lang['er_06'] . '</p>';
     } else {
         $case1 = on;
         $case2 = on;
         $case3 = on;
         $case4 = off;
         $num1 = 8;
         $num2 = 1;
         $newpass = generator($case1, $case2, $case3, $case4, $num1);
         $text = "<p>Здравствуйте <b>" . $a['login'] . "</b>!</p><p>По Вашей просьбе высылаем новый пароль к аккаунту " . $a['login'] . "<br /><p>Новый пароль: <b>" . $newpass . "</b></p>С Уважением, администрация проекта " . $cfgURL . "<hr /><p>Hello <b>" . $a['login'] . "</b>!</p><p>At your request, send new password to your account " . $a['login'] . "<br /><p>New password: <b>" . $newpass . "</b></p>Sincerely, Administration project <a href=\"http://" . $cfgURL . "\">" . $cfgURL . "</a>";
         $subject = "New password / Новый пароль";
         $headers = "From: " . $adminmail . "\n";
         $headers .= "Reply-to: " . $adminmail . "\n";
         $headers .= "X-Sender: < http://" . $cfgURL . " >\n";
         $headers .= "Content-Type: text/html; charset=windows-1251\n";
         mysql_query("UPDATE `users` SET pass = '******' WHERE login = '******'login'] . "' LIMIT 1");
         if (mail($email, $subject, $text, $headers)) {
             print '<p class="erok">' . $lang['er_07'] . '</p>';
         } else {
             print '<p class="er">' . $lang['er_08'] . '</p>';
         }
     }
 } else {
     print '<p class="er">' . $lang['er_09'] . '</p>';
            <section class="row">
                <h1 class="text-center">POO avancée en PHP - Les générateurs - valeurs retournées</h1>
                <p>Retourner des valeurs avec yield</p>
                
                <!-- Les générateurs
                ================================================== -->
                <h2>Retourner des clés avec valeurs</h2>
                <p class="col-sm-12">
                    <?php 
function generator()
{
    for ($i = 0; $i < 10; $i++) {
        (yield 'Itération n°' . $i);
    }
}
foreach (generator() as $key => $val) {
    echo $key . ' => ' . $val . '<br>';
}
?>
                </p>    
                
                    
                <h2>Modifier la clé associée à la valeur</h2>
                <p class="col-sm-12">
                    <?php 
function generator2()
{
    (yield 'a' => 'Itération 1');
    (yield 'b' => 'Itération 2');
    (yield 'c' => 'Itération 3');
    (yield 'd' => 'Itération 4');
示例#10
0
<?php

## Использование return в генераторе.
function generator()
{
    (yield 1);
    return yield from two_three();
    (yield 5);
}
function two_three()
{
    (yield 2);
    (yield 3);
    return 4;
}
$generator = generator();
foreach ($generator as $i) {
    echo "{$i}<br />";
}
echo "return = " . $generator->getReturn();
示例#11
0
文件: CoreTest.php 项目: ejz/core
 public function testGenerator()
 {
     $go = function ($str) {
         return generator($str);
     };
     $this->assertEquals($go('[]'), '');
     $this->assertEquals($go('ab'), 'ab');
     $this->assertEquals($go('[a]'), 'a');
     $this->assertEquals($go('[a][b]'), 'ab');
     $this->assertEquals($go('[a[b]][c]'), 'abc');
     $this->assertTrue(!!preg_match('~^a|b$~', $go('a|b')));
     $this->assertTrue(!!preg_match('~^a|b|c$~', $go('a|b|c')));
     $this->assertTrue(!!preg_match('~^a[bc]$~', $go('a[b|c]')));
     $this->assertTrue(!!preg_match('~^(a|b) (1|2)$~', $go('[a|b] [1|2]')));
     foreach (range(1, 1000) as $_) {
         $this->assertTrue(!!preg_match('~^(a|b|c) (x|y|z|(X|Y|Z)) (1|2|3)$~', $go('[a|b|c] [x|y|z|[X|Y|Z]] [1|2|3]')));
     }
     $check = array();
     foreach (range(1, 100000) as $_) {
         $this->assertTrue(!!preg_match('~^(a|b|c|)$~', $__ = $go('[a(7)|b|c|]')));
         $check[$__] = (isset($check[$__]) ? $check[$__] : 0) + 1;
     }
     $sum = array_sum($check);
     array_walk($check, function (&$_) use($sum) {
         $_ = round($_ / $sum, 1);
     });
     $this->assertTrue($check['a'] === 0.7);
     $this->assertTrue($check['b'] === 0.1);
     $this->assertTrue($check['c'] === 0.1);
     $this->assertTrue($check[''] === 0.1);
     //
     //
     //
     $_ = $go("[a|b](2)");
     $this->assertTrue($_ === "ab" or $_ === "ba");
     $_ = $go("[a(0)|b](2)");
     $this->assertTrue($_ === "b");
     $check = array();
     foreach (range(1, 100000) as $_) {
         $__ = $go('[a(9)|b](2)');
         $check[$__] = (isset($check[$__]) ? $check[$__] : 0) + 1;
     }
     $sum = array_sum($check);
     array_walk($check, function (&$_) use($sum) {
         $_ = round($_ / $sum, 1);
     });
     $this->assertTrue($check['ab'] === 0.9);
     $this->assertTrue($check['ba'] === 0.1);
 }
示例#12
0
 * Date: 2015/06/26
 * Time: 2:21 PM
 */
/**
 * @param int $start
 * @param int $end
 * @param int $step
 * @return Generator
 */
function generator($start, $end, $step = 1)
{
    for ($i = $start; $i <= $end; $i += $step) {
        (yield 'name' . $i);
    }
}
$coroutine = generator(1, 2);
xdebug_debug_zval('coroutine');
$valid = $coroutine->valid();
xdebug_debug_zval('valid');
$coroutine->rewind();
$current = $coroutine->current();
xdebug_debug_zval('current');
$valid = $coroutine->valid();
xdebug_debug_zval('valid');
$coroutine->next();
$current2 = $coroutine->current();
xdebug_debug_zval('current2');
$valid = $coroutine->valid();
xdebug_debug_zval('valid');
$coroutine->next();
$current3 = $coroutine->current();
示例#13
0
<?php

function generator()
{
    (yield 10);
    (yield "key" => "value");
    yield;
}
$iterator = generator();
foreach ($iterator as $key => $value) {
    echo "{$key} -> {$value}" . PHP_EOL;
}
// reference generator
function &referenceGenerator()
{
    $value = 1;
    $index = 0;
    while ($index < 5) {
        (yield $value);
        $index++;
        echo $value . PHP_EOL;
    }
}
$referenceIterator = referenceGenerator();
// used with &
foreach ($referenceIterator as &$value) {
    $value += $value;
}
示例#14
0
function generator2()
{
    (yield 2);
    (yield 3);
    yield from generator();
}
function coursematch($courselist, $num, $darr, $conn)
{
    if (empty($courselist)) {
        return array();
    }
    $masterarr = array();
    function addMaster($array, &$master)
    {
        //print_r($array);
        $master[] = $array;
    }
    function check($con1, $con2)
    {
        foreach ($con1 as $a) {
            foreach ($con2 as $b) {
                if ($a->conflictBool($b) && $a->sameDay($b)) {
                    return 0;
                }
            }
        }
        return 1;
    }
    //check using user preferences
    //$time: 9,10,11,12
    //days is an array in the style "M T W Th F S"
    function checkPref($con1, $con2, $time, $days)
    {
        foreach ($con1 as $a) {
            if (convertToMin($a->time_start) < $time * 60) {
                return 0;
            }
            //checks required days with days in classes
            foreach (str_split($a->days) as $day) {
                foreach (str_split($days) as $day2) {
                    if ($day == $day2) {
                        return 0;
                    }
                }
            }
        }
        foreach ($con2 as $b) {
            if (convertToMin($b->time_start) < $time * 60) {
                return 0;
            }
            //checks required days with days in classes
            foreach (str_split($b->days) as $day) {
                foreach (str_split($days) as $day2) {
                    if ($day == $day2) {
                        return 0;
                    }
                }
            }
        }
        return 1;
    }
    $queue = array();
    $index = 1;
    $count = count($courselist);
    $queue[] = generator($courselist[0], $conn);
    $iterations = array(1);
    while (!empty($queue)) {
        if ($index < $count) {
            $curr = generator($courselist[$index], $conn);
            $iterations[$index] = 0;
            for ($a = 0; $a < $iterations[$index - 1]; $a++) {
                foreach ($queue[0] as $con1) {
                    array_shift($queue);
                    foreach ($curr as $con2) {
                        if (check($con1, $con2) && checkPref($con1, $con2, $num, $darr)) {
                            $newArr = array();
                            foreach ($con1 as $elem1) {
                                $newArr[] = $elem1;
                            }
                            foreach ($con2 as $elem2) {
                                $newArr[] = $elem2;
                            }
                            $newIteration = array($newArr);
                            $queue[] = $newIteration;
                            $iterations[$index]++;
                        }
                    }
                }
            }
        } else {
            for ($a = 0; $a < $iterations[$index - 1]; $a++) {
                if (!empty($queue[0])) {
                    addMaster($queue[0], $masterarr);
                    array_shift($queue);
                }
            }
        }
        $index++;
    }
    //print_r($masterarr);
    return $masterarr;
}