php Примермиграциисбэкапом,1 300000аптейтами

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php Примермиграциисбэкапом,1 300000аптейтами相关的知识,希望对你有一定的参考价值。

<?php declare(strict_types=1);

namespace StarlinerMigrations;

use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;

/**
 * Auto-generated Migration: Please modify to your needs!
 */
final class Version20190626184105 extends AbstractMigration {

    const TABLE_NAME_BACKUP = 'broadcast_message_backup';
    public $result = array();

    public function preUp(Schema $schema): void {

        ini_set('memory_limit', '3072M');

        //$this->tableBackup('broadcast_message', self::TABLE_NAME_BACKUP);

        $qb = $this->connection->createQueryBuilder();
        $qb
            ->select('bm.id')
            ->addSelect('bm.message')
            //->where('id = :id')
            //->setParameter(':id', '3170306')
            ->from('broadcast_message', 'bm');


        $query = $qb->execute();
        $this->result = $query->fetchAll();

    }

    public function up(Schema $schema): void {

        $last = end($this->result)['id'];
        $i = 0;

        foreach ($this->result as $k => $v) {

            $i = $i+ 1;

            //if ($v['id'] > 100) break;

            if ($i % 500 === 0 || $v['id'] === $last) {
                $this->write('>>> Progress: ' . $v['id'] . ' of ' . $last);
            }

            $qb = $this->connection->createQueryBuilder();
            $qb
                ->update('broadcast_message', 'bm')
                ->set('message', ':message')
                ->where('id = :id')
                ->setParameter(':message', $this->convert($v['message']))
                ->setParameter(':id', $v['id']);


            $qb->execute();

            //$arr['id'] = $v['id'];
            //$arr['message'] = $this->convert($v['message']);
            //$this->addSql('UPDATE broadcast_message SET message = :message WHERE id = :id', $arr);
        }

    }

    /**
     * Создаст backup
     * @param $table_name
     * @param $table_name_backup
     */
    private function tableBackup($table_name, $table_name_backup) {

        $this->addSql("
        SET NAMES 'utf8';
	    CREATE TABLE " . $table_name_backup . " LIKE " . $table_name . ";
	    INSERT " . $table_name_backup . " SELECT * FROM " . $table_name . ";
	    ");

    }

    /**
     * Откат
     * @param Schema $schema
     */
    public function down(Schema $schema): void {
        //$schema->dropTable(self::TABLE_NAME_BACKUP);
    }

    /**
     * Определяет, каким образом будет произведена конвертация
     * Возвращает строку в виде данных JSON
     * @param $message
     * @return false|string
     */
    public function convert($message) {

        switch (true) {
            case $this->isJSON($message):
                $json_string = $message;
                break;
            case strpos($message, 'broadcast_message_file_div') !== false:
                $json_string = $this->getForFile($message);
                break;
            case strpos($message, 'broadcast_message_img_div') !== false:
                $json_string = $this->getForImage($message);
                break;
            default:
                $json_string = $this->getForText($message);
                break;

        }

        return $json_string;

    }

    /**
     * Проверит строку на факт хранения данных в виде JSON
     * Возвратит true, если данные хранятся в виде JSON
     * @param $str
     * @return bool
     */
    public function isJSON($str) {
        json_decode($str);
        return (json_last_error() === JSON_ERROR_NONE);
    }

    /**
     * Преобразует строку, содержащую данные по файлу, в данные JSON
     * @param $str
     * @return false|string
     */
    public function getForFile($str) {
        $html = html_entity_decode($str);
        preg_match('#<div>(.*?)<\/div>#s', $html, $match);
        $text = $match[1];
        preg_match('#<a href="(.*?)"#s', $html, $match);
        $href = $match[1];
        $filename = end(explode('/', $href));
        $path = explode($filename, $href)[0];
        $arr[] = array('message_type' => 'text', 'message' => $text);
        $arr[] = array('message_type' => '_info', 'data' => array('count' => 1));
        $arr[] = array('message_type' => 'file', 'path' => $path, 'filename' => $filename);
        return json_encode($arr, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
    }

    /**
     * Преобразует строку, содержащую данные по изображению, в данные JSON
     * @param $str
     * @return false|string
     */
    public function getForImage($str) {
        $html = html_entity_decode($str);
        preg_match('#<div>(.*?)<\/div>#s', $html, $match);
        $text = $match[1];
        preg_match('#<a href="(.*?)"#s', $html, $match);
        $href = $match[1];
        $filename = end(explode('/', $href));
        $path = explode($filename, $href)[0];
        $arr[] = array('message_type' => 'text', 'message' => $text);
        $arr[] = array('message_type' => '_info', 'data' => array('count' => 1));
        $arr[] = array('message_type' => 'image', 'path' => $path, 'filename' => $filename);
        return json_encode($arr, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
    }

    /**
     * Преобразует строку в данные JSON
     * @param $str
     * @return false|string
     */
    public function getForText($str) {
        $arr[] = array('message_type' => 'text', 'message' => $str);
        return json_encode($arr, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
    }
}

以上是关于php Примермиграциисбэкапом,1 300000аптейтами的主要内容,如果未能解决你的问题,请参考以下文章

javascript Автоматическаягенерацияimdlприэкспорте.pdf

php аяксподгрузкаэлементовбитрикс

php Методыдляработыскоэффициентамимассивыпишемсключамикаквгетлисте

python Скриптпреобразованияматрицызаполняемойпострочновматрицузаполняемуюпоспирали---найденчерезгугл

html Примерыверсткипобэму,сглавнойяндексаияндексновости

php Выводвсехкомментариевспагинациейналюбойстранице