PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Страниц (106): В начало « ... 2 3 4 5 [6] 7 8 9 10 ... » В конец
Найдено сообщений: 1580
Строитель
Отправлено: 07 Апреля, 2020 - 16:55:16 • Тема: Регулярное выражение • Форум: Вопросы новичков
Ответов: 5 Просмотров: 510
IncOness пишет: он срабатывает только при точном порядке
По другому оно и не будет работать - регулярки ищут символы, которые находятся в конкретных позициях. В таких случаях можно поиграться с альтернативами "|" (ИЛИ) , вот только из четырёх символов придётся делать много перестановок, и регулярка получится медленная. Я бы взял из строки по отдельности прописные буквы и числа, и уже по их количеству определял логику скрипта, нечто вроде этого:
Строитель
Отправлено: 07 Марта, 2020 - 22:15:50 • Тема: Вырезать вхождения (несколько) из строки • Форум: Программирование на PHP
Ответов: 4 Просмотров: 527
Vladimir Kheifets , дак я решение показал без PHP. Полученный результат можно либо тримить ( $str = rtrim($str, ';') ), либо выполнять в PCRE замену на строку нулевой длины, а на стороне PHP полученную подстроку джоинить ( $str = join(';', $str) )
Строитель
Отправлено: 23 Февраля, 2020 - 13:54:49 • Тема: Функция extract • Форум: Вопросы новичков
Ответов: 6 Просмотров: 481
Цитата: после extract будет одна переменная $mainArray, в которой будет массив mainArray, который бел передан в функцию?
Да.
Строитель
Отправлено: 08 Февраля, 2020 - 21:07:06 • Тема: Выручайте, необходимо дописать чуть чуть • Форум: Напишите за меня, пожалуйста
Ответов: 5 Просмотров: 102
LIME , вот что у меня получилось:
SimpleImage (исходник) :
Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
/**
* File: SimpleImage.php
* Author: Simon Jarvis
* Copyright: 2006 Simon Jarvis
* Date: 08/11/06
* Link: http://www.white-hat-web-design.co.uk/articles/php-image-resizing.php
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details:
* http://www.gnu.org/licenses/gpl.html
*/
class SimpleImage
{
private $image ;
private $image_type ;
public function load( $filename )
{
$this -> image_type = $image_info [ 2] ;
if ( $this -> image_type == IMAGETYPE_JPEG) {
} elseif ( $this -> image_type == IMAGETYPE_GIF) {
} elseif ( $this -> image_type == IMAGETYPE_PNG) {
}
}
public function save( $filename , $image_type = IMAGETYPE_JPEG, $compression = 75, $permissions = null )
{
if ( $image_type == IMAGETYPE_JPEG) {
imagejpeg ( $this -> image , $filename , $compression ) ; } elseif ( $image_type == IMAGETYPE_GIF) {
} elseif ( $image_type == IMAGETYPE_PNG) {
}
if ( $permissions != null ) {
chmod ( $filename , $permissions ) ; }
}
public function output( $image_type = IMAGETYPE_JPEG)
{
if ( $image_type == IMAGETYPE_JPEG) {
} elseif ( $image_type == IMAGETYPE_GIF) {
} elseif ( $image_type == IMAGETYPE_PNG) {
}
}
public function getWidth( )
{
}
public function getHeight( )
{
}
public function resizeToHeight( $height )
{
$ratio = $height / $this -> getHeight ( ) ;
$width = $this -> getWidth ( ) * $ratio ;
$this -> resize ( $width , $height ) ;
}
public function resizeToWidth( $width )
{
$ratio = $width / $this -> getWidth ( ) ;
$height = $this -> getheight ( ) * $ratio ;
$this -> resize ( $width , $height ) ;
}
public function scale( $scale )
{
$width = $this -> getWidth ( ) * $scale / 100 ;
$height = $this -> getheight ( ) * $scale / 100 ;
$this -> resize ( $width , $height ) ;
}
public function resize( $width , $height )
{
imagecopyresampled ( $new_image , $this -> image , 0
, 0
, 0
, 0
, $width , $height , $this -> getWidth ( ) , $this -> getHeight ( ) ) ; $this -> image = $new_image ;
}
}
Repository :
File :
Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
class File implements Repository
{
public function init( string $filename ) : SimpleImage
{
throw new Exception( 'Файл не найден!' ) ;
}
return new SimpleImage( ) ;
}
public function save( SimpleImage $image ) : void
{
$image -> save ( FILENAME) ;
}
}
Url :
Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
class Url implements Repository
{
public function init( string $address ) : SimpleImage
{
if ( $content === false ) {
throw new Exception( 'Не удалось скачать файл!' ) ;
}
return new SimpleImage( ) ;
}
public function save( SimpleImage $image ) : void
{
$image -> save ( FILENAME) ;
}
}
Factory :
Использование :
Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
// Некие настройки для запуска скрипта
const DS = DIRECTORY_SEPARATOR ;
const UPLOAD_DIR = __DIR__ . DS . 'uploads' . DS . 'profile' . DS;
const FILENAME = UPLOAD_DIR . 'file.png' ;
const LOCAL_FILE = __DIR__ . DS . 'EPAM 2.png' ;
/** ********************************************************* **/
// URL для работы с удалённым файлом
$address = 'https://png.pngtree.com/png-clipart/20190611/original/' .
'pngtree-financial-money-money-png-picture-png-image_2943547.jpg' ;
// Раскомментарить для работы с локальным файлом
//$address = LOCAL_FILE;
try {
$repository = Factory:: create ( $address ) ;
$imageObject = $repository -> init ( $address ) ;
$imageObject -> load ( $address ) ;
// Раскомментарить для работы с локальным файлом
//$imageObject->load(LOCAL_FILE);
$imageObject -> resize ( 80, 80) ;
$repository -> save ( $imageObject ) ;
} catch ( Throwable $e ) {
echo $e -> getMessage ( ) ;
}
На данный момент есть существенный недостаток: в зависимости от источника (локальный или удалённый файл) нужно вручную менять имя аргумента в методе $imageObject->load() класса SimpleImage.
Вообще, мне сложно не вмешиваясь в код класса SimpleImage написать его расширение, не используя наследование.
Строитель
Отправлено: 06 Февраля, 2020 - 14:46:01 • Тема: защита двух связанных файлов • Форум: Вопросы новичков
Ответов: 9 Просмотров: 549
Lolya , воспроизвёл код:
userdetails.php
user_details.php
Всё корректно - при попытке открыть файл user_details.php получаю "Error, wrong way to file."; а при обращении к userdetails.php получаю номер строки.
Строитель
Отправлено: 05 Февраля, 2020 - 22:29:18 • Тема: Выручайте, необходимо дописать чуть чуть • Форум: Напишите за меня, пожалуйста
Ответов: 5 Просмотров: 102
LIME пишет: лучше сделать отдельно интерфейс репозитория(получить, сохранить) с двумя реализицями (файл, урл)
и фабрику которая вернет нужный репозиторий по некоему признаку(например разбор строки даденной, урл это или файл решит)
и потом работать с репозиторием и с полученным им объектом имаги
только не надо в репе сохранять объект, максимум строку адреса(урл, файл)
всего два метода: получить объект по строке, и сохранить переданный объект по переданной строке
Чё-то не получилось. Просидел часок-другой, и понял, что или ты не всё перечислил (например предположил, что я сам догадаюсь) , или я не правильно понял суть твоей мысли.
Есть желание разобрать пример?
Интерфейс :
Реализация интерфейса в двух классах :Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
class File implements Repository
{
public function load
( ) : File {
return $this ;
}
public function save( )
{
return true ;
}
}
class Url implements Repository
{
public function load( ) : Url
{
return $this ;
}
public function save( )
{
return true ;
}
}
Простая фабрика :Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
class Factory
{
public function create( string $address ) : Repository
{
return new Url( ) ;
} else {
}
// Хотя можно было бы и сократить:
// $class = preg_match('~^https?://\S+~', $address) ? 'Url' : 'File';
// return new $class();
}
}
Пользовательская часть :Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
$address = 'https://png.pngtree.com/png-clipart/20190611/original/pngtree-financial-money-money-png-picture-png-image_2943547.jpg' ;
$factory = new Factory( ) ;
$repository = $factory -> create ( $address ) ;
var_dump ( $repository -> load ( ) -> save ( ) ) ;
Вроде всё логично. Но как теперь правильно работать с основным классом SimpleImage ? Где его надо создавать, в фабрике? Или на клиентской стороне? Это далеко не все вопросы ))
Строитель
Отправлено: 04 Февраля, 2020 - 19:10:55 • Тема: Выручайте, необходимо дописать чуть чуть • Форум: Напишите за меня, пожалуйста
Ответов: 5 Просмотров: 102
Gerbyss пишет: определить что указать url, затем загрузить по url, поменять размеры и сохранить
Для этого не обязательно редактировать исходный класс, можно написать ещё один класс, который будет зависеть от класса SimpleImage:Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
class GetImageFromURL
{
private $simpleImage , $filename , $url ;
public function __construct( string $url , string $filename )
{
$this -> simpleImage = new SimpleImage( ) ;
$this -> filename = $filename ;
$this -> url = $url ;
}
public function getContent( ) : ? GetImageFromURL
{
if ( $content === false ) {
throw new Exception( 'Не удалось скачать файл!' ) ;
}
return $this ;
}
public function load( ) : GetImageFromURL
{
$this -> simpleImage -> load ( $this -> filename ) ;
return $this ;
}
public function resize( int $width = 80, int $height = 80) : GetImageFromURL
{
$this -> simpleImage -> resize ( $width , $height ) ;
return $this ;
}
public function save( ) : void
{
$this -> simpleImage -> save ( $this -> filename ) ;
}
}
А использовать его так:PHP:
скопировать код в буфер обмена
$url = 'https://png.pngtree.com/png-clipart/20190611/original/' .
'pngtree-financial-money-money-png-picture-png-image_2943547.jpg' ;
$filename = UPLOADS . "profile/fff.png" ;
try {
$getImageFromURL = new GetImageFromURL( $url , $filename ) ;
$getImageFromURL -> getContent ( ) -> load ( ) -> resize ( ) -> save ( ) ;
} catch ( Exception $e ) {
echo $e -> getMessage ( ) ;
}
Можно и наследованием обойтись, даже не знаю, что было бы лучше.
Страниц (106): В начало « ... 2 3 4 5 [6] 7 8 9 10 ... » В конец
Powered by ExBB FM 1.0 RC1. InvisionExBB