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 Скриптпреобразованияматрицызаполняемойпострочновматрицузаполняемуюпоспирали---найденчерезгугл