🤣
https://ramblergroup.com/assets/media/livejournal
Как то грубовато...
Результат 9 строчек кода был показан выше. Может на скрине будет понятней...
С учетом ключей путь, не..
а тут попадет только 0714fdedbb5d79dcd81894276c0a202c.jpeg
$ php -f /var/www/php/p/public/index.phpphpversion: 8.0.2====Array( [due] => Array ( [0] => 0714fdedbb5d79dcd81894276c0a202c.jpeg [1] => buildings-madrid-business-spain-preview.jpg [2] => black.png ) [one] => Array ( [gluboko] => Array ( [0] => donut.png ) [0] => donut.png ))Array( [0] => /due/0714fdedbb5d79dcd81894276c0a202c.jpeg [1] => /due/buildings-madrid-business-spain-preview.jpg [2] => /due/black.png [3] => /one/gluboko/donut.png [4] => /one/donut.png)
Такой результат д.б?
А принцип - да, рекурсивный обход массива..
Может просто математика
reg.ru
Не те аргументы. Вот, вы говорите, не понятым остались c XML. Так вы и не пояснили, где цимес то. Все, кто, что то делает спросили - а нафига? Понятно, что хтмл документ лучше всего описать - если в терминах php, то stdclass/ассоциативный массив, что, по типу хранения, сводится к json/xml/yaml и т.д.
В итоге, тайтл, кейвордс, контент и дескрипшн, можно дополнить много чем, ну например, ближайшими для юзера гео объектами из вашей бд:
=== GEO query for ул. Социалистическая, 1, Ногинск, Московская обл., 142409 coordinates [55.861687, 38.4612583]{'_id': 'moskow', 'regId': '4de427d8409a2ce6', 'region': ['Москва', '55.755814,37.617635'], 'cid': 'moskva', 'visible': 1, 'location': {'type': 'Point', 'coordinates': [37.617635, 55.755814]}, 'name': 'Москва', 'morph': ['Москва', 'Москвы', 'Москве', 'Москву', 'Москвой', 'о Москве', 'в Москве'], 'delivery': {'company': '', 'adres': ''}} {'_id': 'vladimir', 'regId': 'c594f28373bff8b9', 'region': ['Владимирская область', '56.013588,40.679166'], 'cid': 'vladimir', 'visible': 1, 'location': {'type': 'Point', 'coordinates': [40.40703, 56.129042]}, 'name': 'Владимир', 'morph': ['Владимир', 'Владимира', 'Владимиру', 'Владимира', 'Владимиром', 'о Владимире', 'во Владимире'], 'delivery': {'company': 'Деловые Линии', 'adres': 'Куйбышева ул., 4'}} {'_id': 'ryazan', 'regId': '03bb9b253cc7f66a', 'region': ['Рязанская область', '54.333363,40.62524'], 'cid': 'riazan', 'visible': 1, 'location': {'type': 'Point', 'coordinates': [39.734928, 54.629148]}, 'name': 'Рязань', 'morph': ['Рязань', 'Рязани', 'Рязани', 'Рязань', 'Рязанью', 'о Рязани', 'в Рязани'], 'delivery': {'company': 'Деловые Линии', 'adres': 'Окружная дорога, 185 км, стр. 6а'}} {'_id': 'tver', 'regId': '3879ab7468a95a5f', 'region': ['Тверская область', '57.093033,34.706195'], 'cid': 'tver', 'visible': 1, 'location': {'type': 'Point', 'coordinates': [35.911896, 56.859611]}, 'name': 'Тверь', 'morph': ['Тверь', 'Твери', 'Твери', 'Тверь', 'Тверью', 'о Твери', 'в Твери'], 'delivery': {'company': 'Деловые Линии', 'adres': 'п. Элеватор, 3-й переулок, 6, стр. 1'}} {'_id': 'tula', 'regId': '82cc39fcd2313c01', 'region': ['Тульская область', '53.888064,37.575693'], 'cid': 'tula', 'visible': 1, 'location': {'type': 'Point', 'coordinates': [37.617752, 54.193033]}, 'name': 'Тула', 'morph': ['Тула', 'Тулы', 'Туле', 'Тулу', 'Тулой', 'о Туле', 'в Туле'], 'delivery': {'company': 'Деловые Линии', 'adres': 'д. Нижнее Елькино, 77'}}
Так или иначе, ни у кого нет проблем, чтобы хранить, получать, удалять, добавлять эти вещи. Я в монге, запрос для получения ближайших? Да вот он:
query = { 'visible':1, 'location': { '$near': SON([ ('$geometry', SON([ ('type', 'Point'), ('coordinates', [coords[1], coords[0]]) ])), ('$maxDistance', 300000)] ) } }async for doc in coll.find(query).limit(5): .....
Просто совет. Если ищете поддержки в среде разработчиков, попытайтесь показать, где ваш инструмент лучше.
password-hash
$ php -aInteractive shellphp > print password_verify ( 'parovz' , '$2y$10$mmd3ZNDPVPTtXkoXUzc5UuDEzuw71h88s1yKwUW9lxKTnIdzGKHW2' );php > print password_verify ( 'parovoz' , '$2y$10$mmd3ZNDPVPTtXkoXUzc5UuDEzuw71h88s1yKwUW9lxKTnIdzGKHW2' );1php > print password_hash ( 'parovoz' , PASSWORD_DEFAULT);$2y$10$Daq0q49UJIDivQl3mkjjv.e.gPom0Yl6UABuIi.jdbbE/BSzWrmJiphp > print password_verify ( 'parovoz' , '$2y$10$Daq0q49UJIDivQl3mkjjv.e.gPom0Yl6UABuIi.jdbbE/BSzWrmJi' );1
Алгоритм получения хеша подсмотреть в коде
Там было написано добавить. К тому что у вас было
$filename="http://dantonehome.com/upload/iblock/0ee/0ee52d9882258fd40c3007f458abcbce.jpg";
$handle = curl_init($filename);
curl_setopt($handle, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);
Понятно, что и имена переменных привести в соответствие при этом.
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
добавить. Ну или www к урлу
Aisamiery #:асинхронность в данном случае это немного другой подход
...
то процесс может кинуть запрос в БД и не ждать ответа а пойти заниматься более полезными делами? =))
Точно. И если PHP уже готов не только
$socket = new React\Socket\Server(8080, $loop); $server->listen($socket);
, а и на уровне каждого $socket, асинхронно работать с БД, то круто.
# -*- coding: utf-8 -*- import asyncio #from aiorun import run from motor.motor_asyncio import AsyncIOMotorClient from time import time from dsn import dsn import json t0 = time() #старт, потом в тасках время прикинем db = dsn.split('/')[-1] db = AsyncIOMotorClient(dsn)[db] print('mongo_started at %s' % t0) async def f(c, f, n): t = time() a = [] async for document in db[c].find(f): a.append(document) t_end = time() te = (t_end-t)*1000 ''' n : Индекс задачи, te : время затраченное на операцию, мс (t_end-t0)*1000 : время cо старта скрипта,мс, len(a) : кол-во возвращенных объектов ''' print( ''' TaskNum %s; Collection: %s; op_time:%.4f; All_time:%.4f; result_Len:%s; filter:%s''' % ( n, c, te, (t_end-t0)*1000, len(a), f )) # задачи, jobs = ( ( 'avto_koleso', {} ), ( 'avto_koleso_pref', {} ), ( 'avto_koleso', {'vendor':'Mazda'} ), ( 'avto_koleso', {'vendor':'Ford'} ), ( 'koleso', {'name':'Atturo'} ), ( 'avto_koleso_pref', {'_id':'Ford'} ), ( 'koleso', {} ), ( 'avto_koleso', {'vendor': 'УАЗ'} ), ) print( 'Tasks\n', json.dumps(jobs, indent=2, ensure_ascii=False) ) if __name__ == '__main__': loop = asyncio.get_event_loop() tasks = [ f(v[0], v[1], i) for i, v in enumerate(jobs)] #на каждую задачу запрос в коллекцию w = asyncio.wait(tasks) loop.run_until_complete(w) loop.close()
Немного кода, показывает
mongo_started at 1613429516.9852383 Tasks [ [ "avto_koleso", {} ], [ "avto_koleso_pref", {} ], [ "avto_koleso", { "vendor": "Mazda" } ], [ "avto_koleso", { "vendor": "Ford" } ], [ "koleso", { "name": "Atturo" } ], [ "avto_koleso_pref", { "_id": "Ford" } ], [ "koleso", {} ], [ "avto_koleso", { "vendor": "УАЗ" } ] ] TaskNum 7; Collection: avto_koleso; op_time:17.0386; All_time:19.1250; result_Len:150; filter:{'vendor': 'УАЗ'} TaskNum 5; Collection: avto_koleso_pref; op_time:23.0494; All_time:24.2157; result_Len:1; filter:{'_id': 'Ford'} TaskNum 4; Collection: koleso; op_time:83.2248; All_time:85.6171; result_Len:1; filter:{'name': 'Atturo'} TaskNum 2; Collection: avto_koleso; op_time:88.8464; All_time:89.0193; result_Len:1610; filter:{'vendor': 'Mazda'} TaskNum 1; Collection: avto_koleso_pref; op_time:87.5850; All_time:90.7078; result_Len:93; filter:{} TaskNum 3; Collection: avto_koleso; op_time:97.7185; All_time:99.0567; result_Len:3493; filter:{'vendor': 'Ford'} TaskNum 6; Collection: koleso; op_time:105.6306; All_time:106.4796; result_Len:208; filter:{} TaskNum 0; Collection: avto_koleso; op_time:1095.3655; All_time:1098.2263; result_Len:92002; filter:{} (pyenv) [www@localhost conf.d]$
Задачи не по порядку, самый тяжелый запрос, стоявший первым, выполнен последним. И суммарное время All_time: 1098.2263; подозрительно меньше, даже времени выполнения таск 0 + таск 6: 1095.3655 + 105.6306 = 1200,9961
Если, кто то думает, 6 сек и async воткнем во фреймворк, то он большой оптимист.
Вам по целевую аудиторию выше говорили. Она, в вашем случае, в обе стороны. Кому будут нужны ваши простые, но полезные и нужные сайты. Трафик откуда?
С другой стороны: Наполнители контентом, говорите? Ну, вот они - https://searchengines.guru/ru/forum/development/copywriting и еще много где. Но, в основном - деньги на стулья.И никто не будет вестись на - давай поднажми, а потом - озолотишься.
Да ну.. Тут, кстати подходим, к тому, что для "простые, но полезные и нужные сайты" уже все придумали. Нужны решения, как простые, оставить простыми, но сделать более функциональными. В том числе и быстрее и устойчивей к нагрузкам.