Ввиду того, что в пятницу я не работаю, а сегодня другой еды нет, тривиальный вопрос:
1) Что вы имеете против include/require файлов как частей функций/методов?
2) А так же, что вы имеете против образования различного функционала путем подмены пути к файлу с кодом?
Я вижу только один минус: код не в том же окне редактора.
файл с классом:
<?
class SomeClass{
...
public function doSomething(){
require($this->file_with_code);
}
...
}
?>
файл $file_with_code:
<?
$this->doSomething1();
$this->doSomething2();
$this->doSomething3();
?>
Последнее время ходят разговоры об отмене проекта PHP 6 в том виде, в котором он был запланирован. Причиной стали трудности, возникшие при реализации нативной поддержки Unicode. В связи с этим высока вероятность, что PHP 5.4 все же увидит свет раньше шестерки и включит в себя прочие ее нововведения (кроме Unicode), и в частности, расширение APC.
Об этом, а также о создании PHP-приложений для Android можно почитать/послушать в
этом подкасте (англ).
Меня тут в одном сообществе чуть не убили просто за упоминание слова "goto".
И я задумался.
Ведь по сути, оно делает то же самое, что и throw - прекращает выполнение определенного куска кода, если оно, при наступлении определенного условия, становится ненужным.
Собственно, два вопроса.
Так ли страшно goto, как его малюют?
Есть ли принципиальная разница между этими двумя кусками коду?
Именно принципиальная, а не в частностях.
Если данный код разницу не иллюстрирует - прошу привести другой.
<?php
#$a=1;
#$b=2;
/* SNIPPET #1 */
try {
if (!isset($a)) {
throw new Exception('$a is not set');
}
if (!isset($b)) {
throw new Exception('$b is not set');
}
echo '$a + $b = '.($a + $b)."<br>\n";
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "<br>\n";
}
/* SNIPPET #2 */
if (!isset($a)) {
$message = '$a is not set';
goto end;
}
if (!isset($b)) {
$message = '$b is not set';
goto end;
}
echo '$a + $b = '.($a + $b)."<br>\n";
end:
if (!empty($message)) {
echo 'Caught exception: ', $message, "<br>\n";
}
Подскажите, существует ли в природе самый простой обфускатор, удаляющий пробелы, newline и комментарии? Т.е. аналог #php -w < script.php ?
Доброго всем времени суток!
Столкнулся с такой проблемой: мне нужно большой zip архив залить на удаленный ftp сервер. Проблема в том, что скрипт отрабатывает 5 минут и останавливается, не залив файл до конца. Я решил, что стоит заливать файл по частям но снова наткнулся на грабли: не нашел возможности ДОПИСЫВАТЬ в удаленный файл.
Стандартных функций для работы с ftp я не нашел, при использовании fopen('ftp://...','a') выдается ошибка:
"failed to open stream: FTP server reports 451", при использовании fopen('ftp://.../,'w') и fseek($f,...) выдается другая ошибка: "stream does not support seeking". Еще был вариант открыть для чтения и записи, прочитать до конца и начать записывать, но снова ошибка:
"failed to open stream: FTP does not support simultaneous read/write connections in". Поиски в интернете ничего не дали. Кто нибудь может посоветовать, что делать?
Приветствую всех.
Не так давно я попытался ввести в свои приложения
ОО-массив. Он мне был очень нужен исходя из следующих причин:
1. echo foo()[0]; - к элементу массива, возвращённого через функцию или метод, нельзя получить доступ как показано выше. Это оказалось дико неудобным в работе. В JavaScript, например, это можно сделать без проблем: alert(foo()[1][0])
2. При отсутствующем значении в массиве получать NULL:$object->non_exists_prop; // nullСейчас для меня, после года работы с данным объектом, Notice при отсутствующем значении в массиве является _дикостью_.
3. ОО-интерфейс. Сначала я хотел использовать встроенный объект
ArrayObject, но он оказался попросту бесполезным для моих целей, да и создан для обратного.
В итоге пришлось написать свой велосипед,
вот код. И пример:
$array = new Cover_Array( array('foo', 12345,
'element' => array('key' => 'value',
'key2' => 'value2')) );
echo $array->item(0); // foo
echo $array->element->key; // value
echo $array->element->count(); // 2
echo $array->element->append('привет, PHP!')->item(0); // привет, PHP!
echo $array->element->count(); // 3
print_r($array->getDataAsArray()); // получаем обычный многомерный массив
foreach ($array->element as $key => $value)
{
echo "$key => $value<br>"; // key => value
// key2 => value2
// 0 => привет, PHP!
}
$array->new = array(1,2,3);
print_r($array->new);
// array приводится (!) к типу Cover_Array
// Cover_Array Object ( [data:protected] => Array ( [0] => 1 [1] => 2 [2] => 3 ) )
Собственно, проблема одна - работает это дольше обычных массивов. А поскольку в приложении таких массивов-оберток много, то создаются естественные тормоза. Правда, я их не мерил, но это заметно по наносекундам.
Теперь, хочется услышат такой ответ - подобная реализация имеет право на существование или нет?
Делаю рефакторинг & работу над ошибками.
Имееццо регулярка, выдёргивающая тег из текста.
$reels = '/<(' . $tagPattern . ')\s*([^\/>]*)\s*(?:\/>|>(.*?)<\/\s*\\1\s*>)/s' ;
На выходе выдёргиваем, соответственно, параметры тега и содержимое.
но когда мы натыкаемся на вложенные друг в други теги оно (надо же! :) ) начинает сбоить.
подозреваю, что должно быть что-то вида
$reels = '/<(' . $tagPattern . ')\s*([^\/>]*)\s*(?:\/>|>( ( (<\\1\s.+>.+<\/\s*\\1\s*>)|.* )? )<\/\s*\\1\s*>)/s' ;
но подобная конструкция поддерживает только одну вложенность.
а как решить проблему в идеале?
или вообще это не регулярок задача?
Нужно с одного сайта передать пароль на второй.
Ну типа Header("Location:
http://site.ru/?pwd=blabla");
Только чтобы пароль, понятное дело, не виден был.
Где копать? Куки? Шифровать?
Есть консольная программа для конвертации книг из одного формата в другой (calibre) - при запуске программы ручками - она отрабатывает нормально, при запуске из php - внешняя программа выдает ошибку.
Запускал с помощью exec, system, passthru, popen - одно и то же.
Чего то не хватает программке в окружении?
OS - Ubuntu.
код скрипта:
function my_exec($cmd, $input='')
{$proc=proc_open($cmd, array(0=>array('pipe', 'r'), 1=>array('pipe', 'w'), 2=>array('pipe', 'w')), $pipes);
fwrite($pipes[0], $input);fclose($pipes[0]);
$stdout=stream_get_contents($pipes[1]);fclose($pipes[1]);
$stderr=stream_get_contents($pipes[2]);fclose($pipes[2]);
$rtn=proc_close($proc);
return array('stdout'=>$stdout,
'stderr'=>$stderr,
'return'=>$rtn
);
}
$c = 'ebook-convert test.fb2 test.pdf';
var_export(my_exec($c));
Результат работы:
array (
'stdout' => '1% Converting input to HTML...
InputFormatPlugin: FB2 Input running
on test.fb2
Parsing all content...
Forcing index.xhtml into XHTML namespace
Generating default TOC from spine...
34% Running transforms on ebook...
Merging user specified metadata...
Detecting structure...
Auto generated TOC with 27 entries.
Flattening CSS and remapping font sizes...
Transformed CSS selector h|A to h|a
Transformed CSS selector h|BODY to h|body
Transformed CSS selector h|H1 to h|h1
Transformed CSS selector h|H2 to h|h2
Transformed CSS selector h|H3 to h|h3
Transformed CSS selector h|H4 to h|h4
Transformed CSS selector h|H5 to h|h5
Transformed CSS selector h|H6 to h|h6
Transformed CSS selector h|SMALL to h|small
Transformed CSS selector h|BLOCKQUOTE to h|blockquote
Transformed CSS selector h|HR to h|hr
Transformed CSS selector h|DIV to h|div
Transformed CSS selector h|UL to h|ul
Source base font size is 12.00000pt
Cleaning up manifest...
Trimming unused files from manifest...
Creating PDF Output...
67% Creating PDF Output
',
'stderr' => 'Traceback (most recent call last):
File "/tmp/init.py", line 48, in
File "/home/kovid/build/calibre/src/calibre/ebooks/conversion/cli.py", line 254, in main
File "/home/kovid/build/calibre/src/calibre/ebooks/conversion/plumber.py", line 926, in run
File "/home/kovid/build/calibre/src/calibre/ebooks/pdf/output.py", line 67, in convert
File "/home/kovid/build/calibre/src/calibre/ebooks/pdf/output.py", line 94, in convert_text
File "/home/kovid/build/calibre/src/calibre/ebooks/pdf/output.py", line 97, in write
File "/home/kovid/build/calibre/src/calibre/ebooks/pdf/writer.py", line 112, in __init__
Exception: Not OK to use Qt
',
'return' => 1,
)
Результы работы при запуске руками:
1% Конвертирую входной файл в HTML...
InputFormatPlugin: FB2 Input running
on test.fb2
Parsing all content...
Forcing index.xhtml into XHTML namespace
Generating default TOC from spine...
34% Выполняю преобразования книги...
Merging user specified metadata...
Detecting structure...
Auto generated TOC with 27 entries.
Flattening CSS and remapping font sizes...
Transformed CSS selector h|A to h|a
Transformed CSS selector h|BODY to h|body
Transformed CSS selector h|H1 to h|h1
Transformed CSS selector h|H2 to h|h2
Transformed CSS selector h|H3 to h|h3
Transformed CSS selector h|H4 to h|h4
Transformed CSS selector h|H5 to h|h5
Transformed CSS selector h|H6 to h|h6
Transformed CSS selector h|SMALL to h|small
Transformed CSS selector h|BLOCKQUOTE to h|blockquote
Transformed CSS selector h|HR to h|hr
Transformed CSS selector h|DIV to h|div
Transformed CSS selector h|UL to h|ul
Source base font size is 12.00000pt
Cleaning up manifest...
Trimming unused files from manifest...
Creating PDF Output...
67% Создаю PDF Output
PDF output written to test.pdf
Выходные данные сохранены в test.pdf
Возникла нетривиальная задача.
Нужно перенаправить поток вывода с экрана в переменную//файл на какой-то отрезок работы php-скрипта, а затем снова переключиться на вывод с экрана.
Например, есть у нас скрипт
------------------
<? $a=1; $b=2;
echo $a+$b;
?> - IT IS MAGIC! <? $c=4; echo $a+$b+c ?> YES!
------------------
Необходимо, чтобы текст "3 - IT IS MAGIC" был перенаправлен в файл template.txt а "4 YES!" было отдано клиенту.
Курю маны, пока ничего подобного найти не смог.
В какую сторону копать?
Привет!
Есть скрипт преобразующий изображение (размеры, фон и бла бла бла).
Скрипту мы передаем параметры через GET типа <img src="/img.php?f=hi.jpg&w=150&h=200&far=1" /> что вызывает рвоту и понос!
В идеале красиво было-бы так <img src="/img/sks8d879sd8f7987f8s7df8sd8f7.jpg" /> или так <img src="/img/123456.jpg" /> где sks8d879sd8f7987f8s7df8sd8f7 или 123456 ключ к данным где хранятся параметры ширины, высоты и т.д.
Собственно вопрос, где лучше хранить эти параметры в базе или в файлах? Интересует с точки зрения нагрузки на сервер, с базой ведь предется на каждую картинку выполнять и подключение и запрос, а если картинок этак 100 на странице? Или может есть альтернативный метод передачи параметров, красиво зашифровав и дешифровав исполняемым скриптом?
У нас открыта вакансия Senior PHP Developer.
Требования:
- обязательный опыт работы с PHP5, MySQL5, FreeBSD (Linux), JavaScript;
- опыт работы с nginx, memcached приветствуется;
- знание ещё одного языка программирования приветствуется;
- знание паттернов проектирования приветствуется;
- к резюме обязательно прилагать 200-300 строк кода, написанного Вами;
- возраст до 30 лет.
Условия:
- рабочий день с 10.00. (11.00.) до 19.00.(20.00);
- пятидневная рабочая неделя;
- оплачиваемый отпуск (21 день);
- ЗП 1500$.
Если Вам будет интересна наша вакансия и условия, пришлите нам исходные коды каких-либо своих проектов, на PHP и по возможности на JS на мыло ryabukhinak@googlemail.com
Друзья, приглашаю в новое сообщество о Magento
ru_magento .
Здравствуйте.
Пытаюсь подключиться к удаленному фтп через curl. Использую такую вот конструкцию:
curl_setopt($ch, CURLOPT_URL, 'ftp://login@host.net:pass@xx.xx.xx.xx/'."test_curl.txt");
где login@host.net - это имя пользователя для фтп. Проблема в том, что когда в логине присутствует символ @, curl выдает ошибку 6, то есть, can't resolve host. Подозреваю, что как хост в этом случае воспринмиается все то, что стоит после первого @.
Если убрать @ из имени пользователя, то хост он находит, но естественно выдает ошибку 67 - не может залогиниться. Посоветуйте пожалуйста как с этим бороться.
Спасибо.
Добрый день.
Подскажите пожалуйста в чем может быть проблема. Я просто пытаюсь положить файл на фтп. Вот мой код:
$connection = ftp_connect('хх.хх.хх.хх');
$login = ftp_login($connection, 'user', 'pass');
echo('logged_ok
');
if (!$connection || !$login)
{
echo('FTP connection failed!');
}
else
{
echo('start uploading, time='.time().'
');
$upload = ftp_put($connection,"1125.xml", "/home/teremco/public_html/UsersXMLOUT/1125.xml", FTP_BINARY);
echo('finished uploading, time='.time().'
');
if (!$upload) { echo 'FTP upload failed!'; }
}
ftp_close($connection);
Когда доходит до ftp_put - все виснет секунд на 40, после чего появляется ошибка 404. Подскажите как узнать в чем именно проблема?
Наиболее забавно то, что проблема появилась когда я начал тестировать на линуховом сервере хостера. На двух виндовых локальных машинах скрипт работал без проблем.
Заранее благодарю за помощь.
Привет, коллеги. Кто из вас использует IoC (inversion of control) и/или фабрику объектов и/или инъекцию зависимостей? Может кто-нибудь показать мне пример конфигурационного файла, в котором описываются межобъектные зависимости? что-то вроде
INSTANCES:
Barsik:
class: Black_Cat
config: [...]
Layka:
class: White_Dog
config: [...]
Sharik:
class: Red_Dog
config: [...]
DEPENDENCIES:
class Application
interface iCat: instance Barsik
interface iDog: instance Layka
class Sub:
interface iDog: instance Sharik
Так вот, как эта конфигурация выглядит у вас?
привет, коллеги
вроде это легко, но вопрос такой - в некоторых браузерах (чаще всего в IE, но также наблюдалось в FF и Safari) на некоторых машинах меняется ID сессии, сайт на PHP
все как обычно, в начале каждой страницы сайта есть include файла init.php, в котором первая строка вот такая:
<?php
session_start();
...
?>
после чего я для проверки вывожу на каждой странице ид сессии через session_id() и в некоторых случаях он меняется на другой при переходе со страницы на страницу, особенно при переходе через POST
от чего это может зависеть? проблема в том, что есть сайт с корзиной и все товары при покупке записываются туда, когда же происходит переход на checkout - ид сессии меняется и соотв. информация о покупках теряется
не могу найти причину, почему на некоторых компьютерах всегда стабильно работает, на некоторых работает через раз
куки? что-то еще? где копать?
спасибо за ответы
Здравствуйте.
Возможно ли в PHP получить исходный код POST запроса, т.е. не сам массив $_POST, а то, из чего составлялся массив $_POST.
Исходный код POST запроса и имеет вид:
Content-Type: multipart/form-data; boundary=---------------------------287032381131322
Content-Length: 658 -----------------------------287032381131322
Content-Disposition: form-data; name="_target1" 1 -----------------------------287032381131322--
Посмотреть можно в Firebug: Сеть -> POST -> Исходный код.
Добрый день!
Странная ситуация, но в гугле ответа на этот вопрос не нашел.
Дело в том, что раньше на моем сайте было так: При заполнении формы если обновить страницу, уйти куда-то и вернуться назад, введенные данные сохранялись в форме. Какое-то время назад, в ходе какого-то апдейта что-то поломалось и теперь форма очищается при обновлении страницы или при возвращении с другой страницы (написали
что-то в форме, перешли по ссылке, щелкнули назад, а все пусто). Не знаю что где поменял, но поломалось на всем сайте, все формы теперь так ведут.
Может, есть у кого идеи из-за чего оно вдруг могло произойти?
P.S.
— Это не браузер, другие сайты сохраняют значения формы при возврате или обновлении.
— Это не хостинг, другие сайты на нем же тоже работают гуд.
— Это глобально на всем сайте, то есть и в админе и на самом сайте формы не запоминают содержимое (т.е. в каких-то глобальных местах оно).
Весь моск уже сломал. :(
Добрый вечер, ru_php!
Возможно туплю, но есть такая казалось бы простая задачка, основной загвоздкой в которой является необходимость вызвать в одном php файле две одноименные функции, описание которых находится в двух разных файлах, подключаемых через require_once. По описанию функции разные. При решении задачи в лоб, естественно, выдается ошибка Fatal error: Cannot redeclare func1() (previously declared in Z:\home\test\www\includes\fromfile1.php:6)...
Первое (и последнее), что пришло на ум - создать в каждом файле с описаниями функций разноименные классы, и осуществлять вызов функций в основном файле как одноименные методы объектов этих классов... Но, по-моему, это совершенно не то, что требовалось.
Может, кто что посоветует?