LINUX.ORG.RU

Сообщения gwyllum

 

Подключение по ssh в локальной сети

Форум — General

Добрый вечер. Ситуация следующая - есть комп с убунтой, есть мак. Оба компьютера подключены к домашнему роутеру. Комп по проводу, мак по вайфаю. Очень бы хотелось получить доступ к компу на убунте через ssh. Возможно ли это? С учетом того, что выделенного айпишника провайдер не выдает.

 

gwyllum
()

При загрузке нескольких файлов постоянно ловлю ошибку 413

Форум — Web-development

Всем привет. При загрузке через форму нескольких файлов(каждый по 700-800кб) постоянно получаю ошибку nginx’a 413 Request Entity Too Large

в конфиге выставлены параметры

client_max_body_size 100M;

client_body_buffer_size 12M;

т.е. за глаза должно хватать. гугление постоянно приводит к этим двум параметрам. вряд ли это важно, но в php.ini выставлены следующие параметры

post_max_size 12M

upload_max_filesize 12M

подскажите, куда еще можно раскопать?

 ,

gwyllum
()

PHP - реализация отложенных задач

Форум — Development

Доброго времени суток. Есть следующая задача, попробую описать максимально абстрактно - есть некий клиент, который шлет компаниям запрос. Каждая компания должна получить уведомление об этом запросе. Уведомление запись в БД с привязкой к конкретной компании. Пока количество компаний небольшое, то проблем нет. Но если уведомление должны получить 100+ компаний(нужно создать 100+ записей в БД), то такая логика сильно тормозит страницу. Решил вынести всю эту работу на сервер. Нужные работы будут хранится в базе в формате |Class|Method|Params|Status|Date_create

Логика такая - вызываем метода класса и передаем ему массив params. Скрипт, который вызывается по крону выбирает наиболее старые задачи, у которых статус завершения отсутствует и начинает выполнять. Если метод возвращает true, то ставим статус успешный

Задумался о том, где хранить эти задачи. В той же Mysql базе, что и сам сайт? В файлах? Или может в каком-нибудь Nosql хранилище? Есть ли смысл заморачиваться, или просто хранить в обычной таблице и не мучаться? Буду очень благодарен за советы.

 ,

gwyllum
()

Файл-сервер с подключением через wifi. Возможно ли

Форум — Development

Добрый день. Прошу прощения, если глупо сформулировал вопрос, но никакого опыта в этой области нет. С-но проблема: есть два ноута, один на маке, второй на линуксе+планшеты на win10 и android. Проблема в относительно малом объеме памяти у почти всех устройств+актуальности данных(если добавились новые данные, то должны увидеть сразу все устройства). С-но, что нужно:

1. Возможность иметь некое общее хранилище для всех устройств

2. Никаких проводов для передачи данных, поэтому всякие внешние usb-диски отпадают

3. Очень желательно, чтобы данные были доступны по wifi, когда находишься дома. Ну и возможность доступа по интернету также желательна

4. Нежелателен какой-либо специальный софт или веб-интерфейс для доступа к данным, т.е. желательно, чтобы была некая сетевая папка, по аналогии с тем, как монтируются разделы в линуксе или маке. Т.е. захотел например послушать музыку, перетянул из сетевой папки в плеер и все работает

5. Данные должны быть доступны именно удаленно, т.е. никакой синхронизации с хранением файлов на устройствах.

6. Должно работать хотя-бы на mac, windows и linux. В идеале также устройства на ios и android должны иметь доступ.

Отсюда вопрос - возможно ли это в принципе сделать? Если да, то пните пжлст в примерном направлении.

 ,

gwyllum
()

PHP WSDL - не могу вызвать функции, хотя вижу их в списке

Форум — Development

Здравствуйте. Имеется следующая проблема - подключаюсь к wsdl, но не могу вызывать описанные функции. Т.е. если я вызываю getFunctions , то вижу описание функций, но при попытке вызвать получаю ошибку вида [SoapFault] Not Found (0)

Если попытаться вызвать функцию через __soapCall, то просто возвращает NULL. Пример того, что возвращает getFunctions:

array(6) {
  [0]=>
  string(62) "GetPharmaciesResponse GetPharmacies(GetPharmacies $parameters)"
  [1]=>
  string(62) "GetCategoriesResponse GetCategories(GetCategories $parameters)"
  [2]=>
  string(59) "GetSimptomesResponse GetSimptomes(GetSimptomes $parameters)"
  [3]=>
  string(62) "GetPharmaciesResponse GetPharmacies(GetPharmacies $parameters)"
  [4]=>
  string(62) "GetCategoriesResponse GetCategories(GetCategories $parameters)"
  [5]=>
  string(59) "GetSimptomesResponse GetSimptomes(GetSimptomes $parameters)"
}

вот код, которым вызываю

$options = array(
	'login' => 'somelogin',
	'password' => '123123'
);

$client = new SoapClient(
	"http://example.com:8080/test/ws/directories.1cws?wsdl",
	$options
);

echo "<pre>";
var_dump($client->__getFunctions());//это работает, список см. выше

var_dump($client->__soapCall("GetPharmacies"));//возвращает NULL

var_dump($client->GetPharmacies());//это выдает ошибку

Может кто посоветует куда можно копать?

 , ,

gwyllum
()

MySQL выборка больших данных

Форум — Development

Добрый день, имеется следующая проблема. В базе данных хранятся полигоны для отрисовки в json-формате. Сама структура таблицы очень простая: id(int) coords - с-но координаты(MEDIUMTEXT). Размер может быть в районе 8-10 Мб. section_id(int) - привязка к сущностям CMS, к делу не относится

Суть проблемы следующая: выборка большого количества полигонов для стран тормозит, Т.е. банальный

SELECT coords from polygons WHERE section_id=23423423
может выполнятся 5-7 секунд, что недопустимо. Понятно, что на сайте используется кеширование, но такое время загрузки неприемлемо.

Что пробовал сделать: добавил еще одну колонку: coords_min, где хранится урезанная версия полигонов - условно говоря, я прошелся по всем записям и выкинул, допустим каждую вторую точку в полигонах и выбираю вместо полных координат урезанные. Помогло, но не сказать, что сильно.

Отсюда вопрос, каким образом я еще могу оптимизировать это дело?

Возможно есть смысл упаковывать данные, но не будет ли распаковка в итоге занимать больше времени, чем простой SQL-запрос?

Буду благодарен за любые советы

PS ламерский вопрос - если в таблице осталась оригинальная колонка с полными координатами, но она не выбирается, может ли она влиять на скорость запроса и ее лучше удалить, или все равно?

 ,

gwyllum
()

MsSQL - аналог функции pack PHP

Форум — Development

Привет. Стоит задача с формы на php записать данные в удаленную MsSQL базу. Использую PDO. Имеется следующая проблема - на MsSQL сервере стоит ограничение на размер передаваемых данных, если записывать их через bind. Т.е. если я попробую содержимое файла передать таким образом

$stmt->bindParam(':content', $contents, PDO::PARAM_LOB);
то в столбец в базе запишется только первые 4000 символов

Если же я просто приклею содержимое файла к строке запроса

$dbh->query("insert into tbl_Files(ItemTypeID, Link, FileData, CreatedOn) 
values (
'{39A5B367-4A7A-473E-8F74-26977CB6DB67}', 
'".$value['NAME']."', '".$content_file."', '".$CreatedOn."');");
то поймаю ошибку, т.к. в строку запроса попадут бинарные символы. Хотя если читать файл в текстовом формате, то запись успешно проходит(но мне нужно передавать картинки и прочее)

Попробовал решить проблему через unpack, т.е.

$data = unpack("H*hex", $contents);
$dbh->query("insert into tbl_Files(ItemTypeID, Link, FileData, CreatedOn)values 
('{39A5B367-4A7A-473E-8F74-26977CB6DB67}', '".$value['NAME']."', '0x".$data[hex]."', '".$CreatedOn."'
);");
и все записывается успешно, но теперь на сервере необходимо каким-то образом провести обратную процедуру, т.е. перевести 16-ричные данные в обычное бинарное содержимое файла. Т.е. по сути мне нужен аналог функции пхп-шной функции pack. Сам столбец в базе имеет тип IMAGE. Версия сервера Microsoft SQL Server 2016

Может кто-то подскажет, в какую сторону копать в решении задачи?

 , ,

gwyllum
()

PHP GeoIP - получить ip-адреса городов

Форум — Development

Всем привет. Юзаю GeoIP для определения геолокации юзера. Для отладки необходимо подставлять IP-шник юзера, будто он заходит из другого города/страны. Это нужно, чтобы например тестировать показ определенной информации на сайте для региона юзера. Столкнулся с проблемой подстановки такого айпишника. Если для страны его подобрать не проблема, то для конкретного города не получается. Те адреса, которые нахожу в интернете по запросу например «ip address bruxelles» GeoIP показывает просто как Бельгия без определения конкретного города. Поэтому вопрос - можно ли с помощью GeoIP решить обратную задачу - найти один или несколько ip-адресов принадлежащих определенному городу. Не обязательно на PHP, вполне пойдет вариант экспорта базы geoip во что-нибудь читабельное, чтобы можно было это сделать ручками.

 , ,

gwyllum
()

JS отключить console.log в конкретных файлах

Форум — Development

Привет. С-но говоря суть проблемы - разработка ведется несколькими людьми и часто прилетают js-файлы, в которых куча console.log, что очень отвлекает и мешает. С другой стороны сделать

console.log = function() {}
не могу, т.к. используем вывод в консольку сами. Может есть какой-то способ для части файлов отключить вывод, а для части оставить? Вариант с вырезанием всех выводов не вариант, т.к. потом снова прилетят измененные файлы. Может кто что посоветует. Заранее огромное спасибо!

 ,

gwyllum
()

PDO ODBC MsSQL ограничение на вставку данных

Форум — Development

Имеется следующая проблема - PHP7(Сервер на CentOS), установлена PDO ODBC библиотека. Запросы к серверу MsSQL(2016) делаю через него. Проблема в следующем - мне необходимо записать содержимое файла, но записываются только первые 4000 байт данных. Что уже пробовал сделать:

1. Запрос SET TEXTSIZE 99999999 - эта штука работает только в обратную сторону - т.е. при SET TEXTSIZE 99 запишет только 99 байт, а при SET TEXTSIZE 999999 запишет только 4000. Нагуглил запрос SET TEXTLIMIT, но сервер его не распознает и выдает ошибку.

2. Пробовал прописать в php.ini mssql.textsize, mssql.textlimit но безрезультатно, т.е. эти переменные вообще не появляются в php.ini(апач и сервер перезагружались после правок файла). Я так понимаю, что они имели смысл для mssql_query, которую благополучно выпилили в 7 версии PHP а в ODBC они просто не работают

3. Переменная odbc.defaultlrl равна 150k, по идее должно хватать с запасом

4. На самом сервере ограничений нет, т.е. я без проблем подключился через heidiSQL и записал огроменный текст без проблем

5. Поле имеет тип IMAGE

На всякий привожу код

$CreatedOn = strval(date("Y-m-d H:i:s"));

$dbh = new PDO('odbc:DRIVER=FreeTDS;SERVERNAME=myMssql;DATABASE=' . 
$database.';charset=UTF-8', $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$query='SET TEXTSIZE 9999999';
$stmt=$dbh->prepare($query);
$stmt->execute();
$stmt=null;

$ins = "insert into tbl_Files(ItemTypeID, Link, FileData, CreatedOn)
                values (

                    '{39A5B367-4A7A-473E-8F74-26977CB6DB67}', 'filename.txt', :content, '{$CreatedOn}'

                )";

$stmt = $dbh->prepare($ins);
$filename = "test.txt";
$handle = fopen($filename, "rb");
$contents = fread($handle, filesize($filename));
fclose($handle);

$stmt->bindParam(':content', $contents, PDO::PARAM_LOB);
$stmt->execute();

Буду очень благодарен, если кто подскажет куда копать

 , , ,

gwyllum
()

Есть ли идеальный компьютер для линукса

Форум — Desktop

Сорри за такое холиварное название. Попробую описать суть проблемы. На линуксе сижу с 2012 года. Сперва была мандрива, потом PCLinuxOS, потом Убунта. Постоянно сталкиваюсь с какими-то глюками, преимущественно с железом. Пока был ноут с nvidia, периодически отваливался compiz и падали иксы нафиг. Поскольку в линуксе я не такой спец, то зачастую не мог их завести и все решалось переустановкой системы. Благо, что /home на отдельном разделе и данные не терялись. Купил себе новый комп год назад. Видюху не брал внешнюю, т.к. не любитель новомодных игр. Ограничился intel hd video 4600, которая встроена в core i5. Ну, теперь-то не ноут - подумал я - будет меньше глюков. В итоге глюков стало больше. Пробовал как стандартные дрова из убунты, так попробовал скачивать с сайта Intel, компиз все так же глючил. Фиг с навороченными эффектами, можно даже без компиза. Но начиная спустя какое-то время даже без компиза начинались глюки. При старте системы окно было искажено помехами. Ну, что-то подобное можно увидеть, если на старом монике поставить неподдерживаемое разрешение. Т.е. изображение двоится и сильно колышется. Сразу проблема решалася выбором другого ядра - вместо 4.2 выбирал 3.9 и снова все начиналось работать.Но потом даже это перестало помогать. Решил, что возможно это глючная юнити создает проблемы. Установил себе Mint с Cinnamon. Поставил только пару программ,даже драйвера другие не ставил. После перезагрузки то же самое искажение экрана. Сперва можно было хотя-бы в recovery mode запустить Cinnamon в режиме программного рендеринга. Потом ошибка mdm и все.

Отсюда вопрос - есть ли какое-то сочетание железа и ПО, которое будет хотя-бы не будет глючить на пустом месте при решении тривиальных задач. Линукс мне нравится. Я привык к его плеерам, привык ставить апач а не пользоваться денвером или опен-сервером. Привык к консоли. Но есть ли нормальный способ полноценно работать а не писать на ЛОР каждый день? Что бы вы посоветовали человеку, у которого нет три месяца разбираться с арчем или генту(если вы разобрались за вечер, то вы молодец, но не все такие), у которого нет времени восторгаться свободой дебиана, в репах которого нет скайпа, потому что сейчас 3 ночи, а завтра с утра у тебя в этом скайпе совещание с начальством и банально нет времени разбираться с этим. На винду возвращаться не хочется. Так есть ли какая-то конфигурация аппаратного обеспечения, которая не будет глючить на линуксе, причем на линуксе, который можно установить и сразу начать работать? Или эта проблему можно решить только скопив две штуки евро и купив себе мак?

Буду благодарен за советы. Возможно в чьей-то системе ценностей я буду неосилятором, но я не считаю необходимостью красноглазить, чтобы делать тривиальные задачи. Это просто противоречит здравому смыслу.

 

gwyllum
()

PHP - вопрос по кодировке

Форум — Development

С-но вопрос - хочу попробовать реализовать алгоритм Хаффмана на PHP. Решил для начала составить таблицу частотности. Пробую следующий код:

while (!feof($handle)) {
	$contents = fread($handle, $fragment_size);

	for($i=0; $i<strlen($contents); $i++){

		$freqTable[ord($contents[$i])]++;
	}
}

foreach ($freqTable as $k => $v){
	echo chr($k)." - $v<br>";
}

т.е. у нас массив из 256 элементов. Номер элемента соответствует ASCII коду. В итоге, в цикле у меня вместо нормальных символов(а я сканирую текстовый файл) выводится тарабарщина. Я так понимаю, проблема в том, что у нас текст может быть, например, в юникоде. Я пробовал разобраться, как узнать, в какой именно кодировке пришел текст. Насколько я понял, нет стопроцентно верного способа определить кодировку. Т.е. текстовые редакторы анализируют текст в различных кодировках и находят какие-то последовательности, имеющие смысл и в зависимости от этого отображают текст в нужной кодировке.

Суть вопроса - мне нужно универсальное решение, не зависящее от кодировки, чтобы составить таблицу частотности. Причем, в дальнейшем, предполагается процесс распаковки, т.е. мне нужно записать данные в той же кодировке.

Пните пожалуйста в нужную сторону. Возможно я просто что-то не понимаю и дофига лишнего додумал, а все на самом деле проще. Заранее спасибо за помощь

 ,

gwyllum
()

Разработка на различных версиях PHP

Форум — Development

Доброго времени суток. Ubuntu. Установлена php 5.6. Часто бывает необходимость поковырять сайты, которые на 5.6 уже не заводятся по той или иной причине. Появилась необходимость переключатся между версиями PHP, как например это реализовано в виндовском openserver. С-но пара вопросов:

1. Есть ли хорошее решение без использования виртуальных машин и нескольких версий Linux?

2. Я слышал про vagrant. Я не совсем понял, чем он удобнее, ведь также приходится разворачивать на VB одну из версий linux? Более удобным переключением между версиями ОС на виртуалке?

3. Возможно конечно поставить несколько версий lampp. Однако, стоит вопрос как они уживутся с уже установленным apache-mysql?

Заранее спасибо за помощь!

 , ,

gwyllum
()

Организация работы в Linux

Форум — Desktop

Доброго времени суток! Задумался об увеличении продуктивности и удобства работы в Linux. Когда был windows-пользователем, была четкая структура папок и набор привычек, которые помогали быстро работать. Сейчас периодически ловлю себя на мысли что некоторые действия вызывают дискомфорт при работе в Linux и хотелось бы что-то оптимизировать. Например, если хранить папки типа Books, Work в домашней папке пользователя, то они теряется в файловом менеджере среди десятков других типа Загрузки, Видео и папок с настройками программ. Прошу поделится советами на следующую тематику:

1. Какую иерархию папок вы используете для хранения данных для работы, музыки, фильмов и прочего? Используете ли вы отдельные разделы для например музыки или все храните в home?

2. Если у вас стоит две ОС, то как вы решаете вопрос доступа к файлам с двух систем?

3. Где храните исполняемые файлы? Например такие IDE как PHPStorm, Idea поставляются не в виде deb, rpm-пакетов а просто как архив с исполняемыми файлами. Я создал папку Soft в домашнем каталоге и хранил их там, однако недавно вычитал, что лучше для домашней папки запретить запуск исполняемых файлов для безопасности.

4. Пользуетесь ли какими-то программами для ведения заметок, организации задач и т.п. Я пользовался mylifeorganized и evernote под windows, однако MLO под Linux нет, а использовать wine не хочется.

Буду очень благодарен за ответы на вопросы.

 

gwyllum
()

PHP - нужен совет по событиям

Форум — Development

Доброго времени суток! Потихоньку изучаю PHP и заинтересовался тем, как устроены события. Например, в одном участке кода вешаем на событие(предположим удаление пользователя) какую-то функцию. И когда это событие происходит, вызывается функция. Заинтересовался тем, как это работает. Написал очень примитивный класс, в методы которого передается название события и имя функции, которая должна быть вызвана

//---------begin Event
class Event
{
    private  static $events;
  
    public static  function register($event, $func)
    {
       self::$events[$event]=$func;
    }

    public static function send($event)
    {
        foreach (self::$events as $key => $value)
        {
            if($key==$event)
            {
                $func=self::$events[$key];
                $func();
            }
        }
    }
}
//---------end Event

function func1()
{
    echo "programm start!";
}

function func2()
{
    echo "program end!";
}

Event::register("program_start", "func1");
Event::register("program_end", "func2");


Event::send("program_start");

//do something

Event::send("program_end");
В принципе, работает, но есть один момент - неудобно то, что приходится сперва определять где-то функцию, а уже потом передавать имя. В связи с тем возник вопрос, возможно ли, чтобы был такой синтаксис:
Event::register('program_start', function(){
    echo "Program started!");
});
Заранее огромное спасибо!

 ,

gwyllum
()

PHP - вызывать функцию по названию в url

Форум — Development

Доброго времени суток! Помню, когда ковырял CodeIgniter, там была такая интересная штука, как метод вызов метода контроллера через ссылку. Например, есть контроллер User, у которого есть метод add(). Можно было перейти по ссылке вила site.com/user/add и выполнялся код этого метода. Подскажите пожалуйста ламеру, как такое реализовать?

 ,

gwyllum
()

Общие файлы, mmap - чтение

Форум — Development

Здравствуйте. Подскажите пожалуйста. Есть mmap, которая размещает файл в памяти, ускоряя доступ к нему. Необходимо организовать передачу между двумя процессами.

Пытаюсь сделать так:

 char *f;//область памяти куда поместим файл
    int com_size;//размер
    struct stat s;//структура для получения информации о файле

    pid_t proc;

    proc=fork();

    switch(proc)
    {
        case 0://дочерний процесс

        //ждем пока файл разместится в памяти
        sleep(2);
        fprintf(stderr, "get memory\n" );
        for (int i = 0; i < com_size; i++) 
        {
        char c;

        c = f[i];
        putchar(c);
        }

        break;
        default://родительский процесс

        //размещаем файл в памяти
         int fd;
         fd = open ("111", O_RDONLY);

            /* Get the size of the file. */
            int status;
            status = fstat (fd, & s);
            com_size = s.st_size;

            f = (char *) mmap (0, com_size, PROT_READ, MAP_SHARED, fd, 0);//размещаем файл

    }

получается, что адрес памяти доступен родителю, но потомку недоступен. Не совсем понимаю, как быть. Программа без форков работает нормально.

 ,

gwyllum
()

open возвращает 0

Форум — Development

Доброго времени суток! Хотел спросить, почему вызов open может возвращать 0. Насколько я помню, 1,2 - это stdin&stdout, т.е. open должна возвращать как минимум число 3.

if(green_file = open("greenfile.txt", O_WRONLY |O_CREAT |O_TRUNC,0777 )<0)
{
	critical_error("Ошибка открытия файла");
}

fprintf(stderr, "fd:%d\n", green_file);

fd выдает равный нулю. write при попытке записать в этот дескриптор возвращает -1.

Может ли это быть связано с тем, что открытие файла идет в одном из процессов, порожденных fork'ом?

 ,

gwyllum
()

gcc компилирует старую версию файла

Форум — Development

Здравствуйте, такой вопрос - часто бывает, что я изменяю код, например комментирую вывод определенной переменной или даже просто текста, но при запуске программы по-прежнему выдается значение этой переменной или текст. Файл естественно не только редактирую, но и сохраняю.

запускаю так: ./runcode

содержимое файла runcode:

#!/bin/bash
clear
echo "--------"
echo ""
gcc code.cpp -o proga -pthread
man sem_close | grep '^[A-Z]' |./proga

#./proga

echo ""
echo "--------"

может кто подскажет из-за чего может быть такое?

 ,

gwyllum
()

sem_post не увеличивает значение семафора

Форум — Development

Доброго времени суток. Разбираюсь с семафорами, в связи с чем возник такой вопрос - функция sem_post должен увеличивать значение семафора на единицу, однако это перестает работать, когда я пробую работать с несколькими процессами. Например:

switch(proc)
    {
    	case -1:
    		fprintf(stderr, "Все плохо\n" );
    		break;

    	case 0:
    		fprintf(stderr, "Это потомок\n" );
    		
		    sem_init(&sem, 0, 1);
		    sem_post(&sem);
		    sem_post(&sem);
		    sem_post(&sem);

    		break;

    	default:
    		waitpid(proc,0,0);
    		fprintf(stderr, "Это родитель\n" );

    		sem_getvalue(&sem, &value);
    		printf("%d\n",value);


    }

В программе без fork все нормально работает, т.е. если я сделал sem_post 3 раза, то получил бы значение 4 и т.п. Подскажите пожалуйста, куда копать

 

gwyllum
()

RSS подписка на новые темы