Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2012, 12:01   #11
HDMI
Пользователь
 
Регистрация: 21.09.2009
Сообщений: 48
По умолчанию

Как проще всего сгенерировать php файл ? Если занести в строковую переменную код, то php будет пытаться переменные подменить, а мне нужно именно в том виде, который задам + добавить массив с путями файлов.

Вот к примеру код:

Код:
$file="image.php";
if(!file_exists($file)) {
	$fp = fopen($file, "w");
	$code = "";//Сюда занести код, но как записать его без обработки?
	fwrite($fp, $code");
       fclose ($fp);
}

Разобрался. Нужно использовать одинарные кавычки, забыл совсем про это

Последний раз редактировалось HDMI; 21.10.2012 в 12:08.
HDMI вне форума Ответить с цитированием
Старый 21.10.2012, 13:41   #12
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Эм, пардон. Почему вариант с БД отметнули?
Я бы сделал так:
Есть таблица: id filename number
id - ключевое поле(уж привычка у меня его всюду втыкать)
filename - говорит сам за себя
number - цифры по порядку от 0 до N-1, это поле в индексе, по нему и будет выборка

Запрос сл. вида
SELECT filename FROM table WHERE number = 'rand()%count' LIMIT 1
count - можно хранить в отдельной табличке, или SELECT count(id) AS count FROM table;

Добавление очень простое:
INSERT INTO table (filename, number) VALUES('filename','count')
count++;

Удаление:
Тут воспользуемся тем, что порядок записей не имеет для нас особого значения(капельку пострадает статистика показов, но для 600 это будет совсем незаметно)
UPDATE table SET filename = (SELECT filename FROM table WHERE number = 'count-1' LIMIT 1) WHERE number = 'delete_number' LIMIT 1

DELETE FROM table WHERE number = 'count-1' LIMIT 1

Думаю все понятно, перезаписываем filename удаляемой картинки(предварительно удалив саму картинку) на имя картинки находящейся в конце таблицы, и удаляем последнюю запись из таблицы.

Оптимально вроде по всем аспектам, последние 2 операции(добавление и удаление) не обязательно должны быть оптимальными, т.к. их редко используют, а вот выборка должна, а т.к. у нас поле number находится в индексе и оно уникальное, то выборка должна происходить быстро.(быстрее если бы не было таблицы с индексами)

Или я не прав? Было бы интересно протестировать оба варианта(с php файлом и с БД). И ИМХО, если картинок будет over9000 то о каком файле php может идти речь?(такой вот взгляд в будущее)

По поводу, забросить сразу несколько картинок в папку, то тут лучше сделать возможность грузить сразу несколько файлов в админке.

Последний раз редактировалось Kostia; 21.10.2012 в 13:46.
Kostia вне форума Ответить с цитированием
Старый 21.10.2012, 14:02   #13
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Kostia, по первое, дерево каталогов тоже есть реляционная структура.
по второе взять имена файлов это не значит что надо сканировать каталог, их можно читать из таблицы (MFT, ...), что по сути и есть индекс.
по третье, эти данные можно кэшировать в момент обновления файлов.

и вопрос, а нафига козе баян? базу разворачивать, соединение устанавливать ... когда все уже под рукой.
eval вне форума Ответить с цитированием
Старый 21.10.2012, 14:24   #14
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Цитата:
по второе взять имена файлов это не значит что надо сканировать каталог, их можно читать из таблицы (MFT, ...), что по сути и есть индекс.
по третье, эти данные можно кэшировать в момент обновления файлов.
Не понимаю, как это можно использовать на php?
Kostia вне форума Ответить с цитированием
Старый 21.10.2012, 14:44   #15
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

я там выше функцию приводил, я правда не знаю как она внутри делает, но верю что не сканирует.
кэшировать как угодно, в память например. вот к примеру есть модуль http://se2.php.net/manual/ru/class.memcache.php
eval вне форума Ответить с цитированием
Старый 21.10.2012, 17:50   #16
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Цитата:
Ручками не вариант, картинки будут добавляться постоянно
Ну, сделайте функцию, которая при добавлении картинки создаёт список один раз сканирует папку. В чём проблема?
Виталий Желтяков вне форума Ответить с цитированием
Старый 22.10.2012, 13:06   #17
snippet
Пользователь
 
Регистрация: 17.10.2012
Сообщений: 37
По умолчанию

Уважаемый автор, я же вам уже писал.

PHP код:
$arrFiles scandir('/tmp');
$arrFiles array_slice($arrFiles 2);
if(
count($arrFiles)>0){
    echo 
$arrFiles[rand(0,count($arrFiles))];

Или что то не подходит?
http://dev-snippet.com
snippet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оптимизация кода LatuSerge Общие вопросы Delphi 10 27.12.2011 01:51
Оптимизация кода на C# FiloXSee Общие вопросы .NET 4 24.09.2011 17:10
Оптимизация кода ViktorG Microsoft Office Excel 4 12.11.2010 14:43
Оптимизация кода в си dampirik Помощь студентам 4 07.07.2009 11:30
Оптимизация кода viscas PHP 3 31.05.2009 16:04