首页
文章分类
源码资源
技术教程
程序软件
文创娱乐
玄学修炼
关于我们
其他页面
网站统计
友情链接
用户留言
高清壁纸
关于易航
热门文章
Joe再续前缘主题 - 搭建本站同款网站
易航网址导航系统 – 功能强大,轻量易用
JsonDb-PHP轻量级文件数据库系统
Typecho一键调整网站为冬天情景插件
V免签全开源免签约码支付系统(支持:支付宝 微信 QQ)
标签搜索
PHP
Web前端
网站源码
PHP源码
Typecho
Typecho插件
课程资料
Windows程序
Android软件
武术内功
HTML源码
Web
Joe主题
Python
Windows
国漫
网络协议
MySQL
NodeJs
小说
发布
登录
注册
找到
144
篇与
技术教程
相关的结果
- 第 11 页
2024-09-01
Windows系统绕过开机密码
解锁Windows系统开机密码的工具很多,一些PE就附带这样的软件工具,这款Unlocker工具的绕过开机密码还是比较实用的。 图片 隐藏内容,请前往内页查看详情
付费阅读
¥
0.99
技术教程
# Windows
易航
1年前
0
146
0
2024-08-27
使用JavaScript动态生成网站文章目录及内容滚动跟随效果
由于之前使用的文章导读插件性能过于臃肿,导致资源消耗高且难以维护,因此我决定自行开发一个轻量级的文章导读功能。参考了郄郄私语的 案例文章,我实现了以下四个主要功能: 根据文章内容自动生成目录 点击目录跳转至相应章节 滚动阅读时,目录随当前章节自动切换 目录跟随文章内容滚动 目标 本文旨在实现以下功能: 自动生成文章目录 点击目录跳转至对应章节 目录根据当前阅读章节自动高亮 目录随文章内容滚动 根据文章内容自动生成目录 实现自动生成目录的前提是文章内容须有清晰的层次结构,这需要使用 h1 至 h6 标签来定义标题。通过 JavaScript,我们可以提取这些标题来生成目录: var articleTitleList = $('.joe_detail__article').find('h1, h2, h3, h4, h5, h6'); articleTitleList.each(function() { const headingLevel = $(this).prop("tagName").toLowerCase(); const headingName = $(this).text().trim(); console.log(headingLevel, headingName); $('#catalogs').append(`<div class="catalog catalog-${headingLevel}">${headingName}</div>`); });在样式表中为目录项定义缩进样式: .catalog-h2 { margin-left: 1em; } .catalog-h3 { margin-left: 2em; } .catalog-h4 { margin-left: 3em; } .catalog-h5 { margin-left: 4em; } .catalog-h6 { margin-left: 5em; }点击目录跳转至对应章节 点击目录跳转至相应章节可以通过为每个标题添加锚点。我们将在 h1 至 h6 标签上添加 id: articleTitleList.each(function() { const headingName = $(this).text().trim(); const enHeadingName = encodeURIComponent(headingName); $(this).attr('id', `${enHeadingName}`); $('.posts-nav-lists>ul').append(`<li><a href="#${enHeadingName}">${headingName}</a></li>`); });目录自动切换至当前章节 为了让目录随着阅读位置自动切换,我们将监控用户的滚动位置并依据此更新目录的高亮条目: const catalogTrack = () => { let $currentHeading = $('h1'); articleTitleList.each(function() { const $heading = $(this); if ($heading.offset().top - $(document).scrollTop() > 20) return false; // 退出条件 $currentHeading = $heading; }); // 更新目录状态 const anchorName = $currentHeading.attr('id'); $('.posts-nav-lists>ul>li').removeClass('active'); $(`#title-${anchorName}`).parent().addClass('active'); };目录随文章内容滚动 为确保当前章节始终可见,我们控制目录区域的滚动: if ($catalog.length > 0) { $('.posts-nav-box').scrollTop($catalog[0].offsetTop - 50); // 确保可见 }性能优化 为了避免在滚动时频繁调用 catalogTrack 导致性能降低,我们可以使用函数节流技术: function throttle(fn, wait) { let lastTime = 0; return function() { const now = Date.now(); if (now - lastTime >= wait) { fn.apply(this, arguments); lastTime = now; } }; } window.addEventListener('scroll', throttle(catalogTrack, 500)); // 每500毫秒调用一次自定义跳转行为 考虑到固定导航条可能遮挡目标章节,我们可以自定义跳转行为,确保目标元素不会被遮挡: document.querySelectorAll('.posts-nav-lists>ul>li>a').forEach(link => { link.addEventListener('click', (event) => { event.preventDefault(); // 阻止默认跳转 const targetId = link.getAttribute('href').substring(1); const targetElement = document.getElementById(targetId); const headerHeight = document.querySelector('.joe_header').offsetHeight; const scrollTop = $(targetElement).offset().top - headerHeight - 10; window.scrollTo({ top: scrollTop, behavior: 'smooth' }); }); });总结 本文记录了生成和控制博客文章目录的思路与方法,针对不同需求可能会有其他解决方案。欢迎大家在评论区讨论和分享建议,感谢阅读! 完整代码示例 HTML 部分 <section class="joe_aside__item posts-nav-box"> <div class="joe_aside__item-title"><i class="fa fa-list-ul"></i><span class="text">文章目录</span><span class="line"></span></div> <div class="joe_aside__item-contain"> <div class="posts-nav-lists"><ul class="bl nav"></ul></div> </div> </section>JavaScript 部分 var articleTitleList = $('.joe_detail__article').find('h1, h2, h3, h4, h5, h6'); if (articleTitleList.length > 0) { // 目录生成及事件绑定 (function () { for (let heading of articleTitleList) { const headingLevel = heading.tagName.toUpperCase(); const $heading = $(heading); // console.log($heading); const headingName = $heading.text().trim(); const enHeadingName = encodeURIComponent(headingName); $heading.attr('id', `${enHeadingName}`); $('.posts-nav-lists>ul').append(`<li class="n-${headingLevel}"><a id="title-${enHeadingName}" href="#${enHeadingName}">${headingName}</a></li>`); // const anchorName = $heading.attr('id'); // console.log(headingLevel, headingName); } if (Joe.IS_MOBILE) { $('.joe_action').append(`<div class="joe_action_item posts-nav-switcher"><i class="fa fa-list-ul"></i></div>`) let joe_aside = $('.joe_aside .joe_aside__item.posts-nav-box .joe_aside__item-contain').html(); $('.joe_aside .joe_aside__item.posts-nav-box').remove(); let html = document.createElement('div'); html.className = 'posts-nav-box'; html.innerHTML = joe_aside; // console.log(html); $('.posts-nav-switcher').append(html); $('.joe_action_item .posts-nav-box').css({ 'position': 'absolute', 'display': 'none', 'right': '50px', 'bottom': '0px', 'padding': '15px', 'border-radius': 'var(--radius-wrap)', 'box-shadow': '0 0 10px 8px var(--main-shadow)', 'overflow': 'auto', 'max-height': '50vh', 'max-width': '80vw' }) $('.joe_action_item.posts-nav-switcher').click(() => { $('.joe_action_item.posts-nav-switcher .posts-nav-box').fadeToggle(200); }); } const catalogTrack = () => { // console.log('页面滚动标题监听'); let $currentHeading = $('h1'); for (let heading of articleTitleList) { const $heading = $(heading); if ($heading.offset().top - $(document).scrollTop() > $('.joe_header').height()) { break; } $currentHeading = $heading; const anchorName = $currentHeading.attr('id'); const $catalog = $(document.getElementById(`title-${anchorName}`)).parent(); if (!$catalog.hasClass('active')) { $('.posts-nav-lists>ul>li').removeClass('active'); $catalog.addClass('active'); } if ($catalog.length > 0) { if ($('.posts-nav-box .joe_aside__item-contain').length > 0) { $('.posts-nav-box .joe_aside__item-contain').scrollTop($catalog[0].offsetTop - 50); } else { $('.posts-nav-box').scrollTop($catalog[0].offsetTop - 50); } } else { $('.posts-nav-lists').scrollTop(0); } } }; /** * 函数节流,时间戳方案 * @param {*} fn * @param {*} wait * @returns */ function throttle(fn, wait) { var pre = Date.now(); return function () { var context = this; var args = arguments; var now = Date.now(); if (now - pre >= wait) { fn.apply(context, args); pre = Date.now(); } } } window.addEventListener('scroll', throttle(() => { catalogTrack(); }, 500)); // 监听文章目录a标签点击 document.querySelectorAll('.posts-nav-lists>ul>li>a').forEach(link => { link.addEventListener('click', (event) => { event.preventDefault(); // 阻止默认跳转行为 // 获取目标元素 ID const targetId = link.getAttribute('href').substring(1); const targetElement = document.getElementById(targetId); if (targetElement) { // 获取目标元素距离页面顶部的距离 const targetTop = $(targetElement).offset().top; // console.log(targetTop); // 获取顶栏高度,考虑动态高度变化和内部元素 const headerHeight = document.querySelector('.joe_header').offsetHeight; // 计算滚动位置 const scrollTop = (targetTop - headerHeight) - 10; // 预留10px的美观距离 window.scrollTo({ top: scrollTop, behavior: 'smooth' }); } else { console.error('目标元素未找到:', targetId); } }); }); }()) } else { $('.joe_aside__item.posts-nav-box').remove(); }通过以上修改,文章的可读性、结构性和实用性得以提升,使读者能够更好地理解和使用所提供的功能。
技术教程
# Web前端
易航
1年前
0
168
1
2024-08-25
三十六计完整详解
三十六计,一计一集,计计相扣,在展现中国古代兵法和东方智慧的同时,浓彩重墨描绘出一幅二千年前中国战国时期政治、军事与各阶层不同的人物情感相交融的历史画卷。 三十六计图片 胜战计 第一计:瞒天过海 备周而意怠,常见则不疑,阴在阳之内,不在阳之对。太阳,太阴。 译:认为准备万分周到,就容易松劲;平时看惯了的,就往往不在怀疑了,秘计隐藏在暴露的事物中,而不是和公开的形式相排斥。非常公开的往往蕴藏着非常机密的。 第二计:围魏救赵 共敌不如分敌,敌阳不如敌阴。 译:树敌不可过多,对敌要各个击破,对现在还不忙于消灭的,要隐藏我们的意图。 第三计:借刀杀人 敌已明,友未定,引友杀敌,不出自力,以损推演。 译:作战的对象已经确定,而朋友的态度还不稳定,要诱导朋友去消灭敌人,避免消耗自己的力量。 第四计:以逸待劳 困敌之势,不以战,损刚益柔。 译:控制敌方力量发展的命脉来扼杀他,而不采取进攻的形势,这就是“损刚益柔”原理的演用。 第五计:趁火打劫 敌之害大,就势取利,刚决柔也。 译:敌方的危机很大,就乘机取利,用优势力量攻击软弱的。 第六计:声东击西 乱志乱萃,不虞“坤下兑上”之象;利其不自主而取之。 译:敌人乱撞瞎碰,摸不清情况,这是《易经》“萃”封上所说的“坤下兑上”的混乱征状。必须利用敌方失去控制力的时机加以消灭。 敌战计 第七计:无中生有 诳也,非诳也,实其所诳也。少阴,太阴,太阳。 译:无中生有是运用假象,但不是弄假到底。而是使假象变真象,大小假象,掩护真象。 第八计:暗渡陈仓 示之以动,利其静而有主,“益动而巽”。 译:故意暴露行动,利用敌方固守的时机,便主动偷袭。 第九计:隔岸观火 阳乖序乱,阴以待逆,暴戾恣睢,其势自毙。顺以动豫,豫顺以动。 译:敌人内部分裂,秩序混乱,我便等待他发生内讧,那时敌人穷凶极恶,翻目仇杀,势必自行灭亡。我要根据敌人变动作好准备;作好准备之后,还要根据敌人的变动而行动。 第十计:笑里藏刀 信而安之,阴以图之,备而后动,勿使有变:刚中柔外也。 译:使敌人相信我方,并使其麻痹松懈,我则暗中策划,充分准备,一有机会,立即动手,使他来不及应变,这是暗中厉害,表面柔和的策略。 第十一计:李代桃僵 势必有损,损阴以益阳。 译:当局势发展有所损失的时候,要舍得局部的损失,以换取全局的优势。 第十二计:顺手牵羊 微隙在所必乘,微利在所必得。少阴,少阳。 译:微小的漏洞必须利用,微小的利益,也必须获得。变敌人小的疏忽,为我方小的胜利。 攻战计 第十三计:打草惊蛇 疑为叩实,察而后动,复者,阴之媒也。 译:有怀疑的就要侦察实情,完全掌握了实情再行动。反复侦察,是发现暗藏敌人的因素。 第十四计:借尸还魂 有用者不可借,不能用者,求借,借不能用者而用之。匪我求童蒙,童蒙求我。 译:有用的不可以利用,怕的是我不能控制它,不能利用的却要去利用,因为我完全可以控制它,利用不能用的而控制它,这不是我受别人的支配,而是我支配别人。 第十五计:调虎离山 待天以困之,用人以诱之,“往蹇来返”。 译:等待天时对敌方不利时再去围困他,用人假象去诱骗他“往前有危险,就返身离开”。 第十六计:欲擒故纵 逼则反兵,走则减势,紧随勿迫。累其气力,消其斗志,散而后擒。兵不血刃,需,有孚光。 译:逼得敌人无路可走,就会遭到坚决的反扑;让他逃走,就会消灭敌人的气势,所以要紧紧地跟踪敌人,但不要逼迫他,借以消耗他的体力,瓦解他的士气,等他的兵力分散了,再行再以捕捉。这样用兵可以避免流血,不逼迫敌人,并让他相信,这对战争是有利的。 第十七计:抛砖引玉 类以诱之,击蒙也。 译:用类似的东西去迷惑敌人,使敌人遭懵上当。 第十八计:擒贼擒王 摧其坚,夺其魁,以解其体;龙战于野,其道穷也。 译:彻底地摧毁敌人的主力,抓住他的首领,借以粉碎他的战争机构,这是一场激烈的总决战。 混战计 第十九计:釜底抽薪 不敌其力,而消其势,兑下乾上之象。 译:力量上不能战胜敌人,可以瓦解他的气势,这就是《易经》兑下乾上的《履卦》上所说的“柔履刚”的办法。 第二十计:混水摸鱼 乘其阴乱,利其弱而无主,随,以向晦入宴息。 译:乘着敌人内部混乱,利用他还是弱小而没有主见,他随从我,像人随着天时吃饭、休息一样。 第二十一计:金蝉脱壳 存其形,完其势;友不疑,敌不动;巽而上蛊。 译:保存阵地的原形,造成强大的声势,使友军不怀疑,敌人也不敢贸然进犯,而我却可以隐蔽地击破另一支敌军。 第二十二计:关门捉贼 小敌困之,剥,不利有攸往。 译:对弱小的敌人,要加以包围歼灭;对垂死挣扎的敌人,如果从后面急追远赶,那是很不利的。 第二十三计:远交近攻 形禁势格,利以近取。害以远隔,上火下泽。 译:处于(扭转)不利的形势(局面),要考虑(阻止)它发展的方向(趋势),(利于)攻取附近的地方,就有利,(不利于)攻击远隔的地方,就有害。《易经聧》卦说:“火苗向上冒,池水向下流,志向不同,也可以结交。” 第二十四计:假途代虢 两大之间,敌胁以从,我假以势,困,有言不信。 译:对处的两个强大敌人中间的国家,敌人胁迫它时,我方却作援求它,立即出兵。《易经困》卦说:“对处在困迫状况下的国家,光空谈而没有行动,是不会被他信任的。” 并战计 第二十五计:偷梁换柱 频更其阵,抽其劲旅,待其自败,而后乘之,曳其轮也。 译:多次变动敌人的阵容,把他的兵力调开,等待他自己败阵,然后用谋进攻他,《易经既济》卦说:“先拖住敌人,然后再替换他。” 第二十六计:指桑骂槐 大凌小者,警以诱之。刚中而应,行险而顺。 译:强大的慑服弱小的,要用警戒的方法来诱导它。《易经师》卦说:适当的强硬,可以得到拥护;施用险诈,可以得到顺从。 第二十七计:假痴不癫 宁伪作不知不为,不伪作假知妄为,静不露机,云雷屯也。 译:宁可假装不知道的,不行动,不可假装知道而轻举妄动。要沉着,不要泄露一点机密,就像迅猛激烈的云雷,在冬季藏入地下般的平静。 第二十八计:上屋抽梯 假之以便,唆之使前,断其援应,陷之死地,遇毒,位不当也。 译:故意露出破绽,引诱敌人深入我方,然后选择有利时机,断绝敌人的前应和后援,使它完全处于死地。敌人这样的下场《易经嗑》上说的好:抢吃腊肉的嗑掉了牙,怪自己的动作不当。 第二十九计:树上开花 借局布势,力小势大;鸿渐于陆,其羽可用为仪也。 译:借别人的局面布成阵势,兵力弱小的看来阵容也显得强大。《易经渐》卦说:鸿雁飞向大陆,全凭它的羽毛丰满助长气势。 第三十计:反客为主 乘隙插足,扼其主机,渐之进也。 译:有空子就要插脚进去,扼住他的主脑机关。《易经渐》卦说:“循序而进”就是这个意思。 败战计 第三十一计:美人计 兵强者,攻其将。将智者,伐其情。将弱兵颓,其势自萎。利用御寇,顺相保也。 译:兵力强大的,就要攻打他的将帅;将帅明智的,就打击他的情绪,用美色诱惑,使其陷入困境或失去战斗力。将帅斗志衰弱、部队士气消沉,他的气势必定自行萎缩。《易经渐》卦说:利用敌人内部的严重弱点来控制敌人,可以有把握地保存自己的实力。 第三十二计:空城计 虚者虚之,疑中生疑;刚柔之际,奇而复奇。 译:空虚的就让它空虚,使人更加难以揣测;在进攻和防御中运用空虚的战术来隐蔽自己的空虚,越发显得用兵出奇。 第三十三计:反间计 疑中之疑,比之向内,不自失也。 译:在疑阵中再布置一层疑阵。《易经比》卦说:来自敌方内部的援助,自己不会受到损失。 第三十四计:苦肉计 人不自害,受害必真。假真真假,间以得行。童蒙之吉,顺以巽也。 译:人不自己迫害自己,受迫害必然是真的;真的变假,间谍便乘机活动。《易经蒙》卦说:把他骗得乖乖的,顺着他活动。 第三十五计:连环计 将多兵众,不可以敌,使其自累,以杀其势。在师中吉,承天宠也。 译:敌方兵力强大,不能硬打,应当运用谋略,使仓储自相牵制,借以削弱他的力量。《易经师》卦说:将帅靠指军不偏不倚,惯打胜仗的就是用兵如神。 第三十六计:走为上计 走为上计全师避敌,在次无咎,未失常也。 译:全军退却,甩开敌人,以退为进,待机破败,这是不违背正常的法则的。 自创计 第三十七计 潜龙勿用 译:自行体悟
技术教程
易航
1年前
0
81
2
2024-08-24
PHPY 打破语言界限,使PHP引入Python生态,开创PHP语言AI编程时代!
PHPY是什么? phpy 是识沃团队最新推出的开源项目,目标是为 PHP 引入 Python 生态,来弥补 PHP 生态的空缺和不足。phpy 使得 PHP 可以调用所有 Python 的包。包括当下非常流行的 AI 库,如:PyTorch、transformers、TensorFlow 等包括当下非常流行的 AI 库,如 PyTorch、transformers、TensorFlow 等,以及科学计算库,如 Numpy、Pandas、Scikit 等,还可以使用图形界面库,如 PyQt、wxPython 等。 不建议在 php-fpm/apache 短生命周期运行环境下使用,频繁地导入/销毁模块的开销会消耗大量资源环境 Linux环境:Ubuntu 22.04.3 LTS PHP版本:PHP 8.1 或以上版本 Python 3.10 或以上版本 安装PHP8.3 下载 wget wget https://www.php.net/distributions/php-8.3.0.tar.gz tar -zxvf php-8.3.0.tar.gz下载地址:https://www.php.net/downloads安装依赖包 sudo apt-get install libfcgi-dev libfcgi0ldbl libjpeg-turbo8-dev libmcrypt-dev libssl-dev libc-client2007e libc-client2007e-dev libxml2-dev libbz2-dev libcurl4-openssl-dev libjpeg-dev libpng-dev libfreetype6-dev libkrb5-dev libpq-dev libxml2-dev libxslt1-dev libzip-dev libsqlite3-dev libonig-dev pkg-config libxml2-dev libkrb5-dev libssl-dev libsqlite3 libbz2-dev libpng-dev libjpg-dev libfreetype6-dev libc-client2007e-dev libonig-dev libreadline-dev libxslt-dev libzip-dev如果安装的依赖包不存在,请通过命令:apt-cache search freetype 查找相应的安装包安装即可编译 ./configure \ --prefix=/usr/local/php-8.3 \ --with-config-file-path=/usr/local/php-8.3/etc \ --with-zlib-dir \ --with-freetype \ --enable-mbstring \ --enable-soap \ --enable-calendar \ --with-curl \ --with-zlib \ --enable-gd \ --disable-rpath \ --enable-inline-optimization \ --with-bz2 \ --with-zlib \ --enable-sockets \ --enable-sysvsem \ --enable-sysvshm \ --enable-pcntl \ --enable-mbregex \ --enable-exif \ --enable-bcmath \ --with-mhash \ --with-zip \ --with-pdo-mysql \ --with-mysqli \ --with-mysql-sock=/var/run/mysqld/mysqld.sock \ --with-jpeg \ --with-openssl \ --with-fpm-user=www \ --with-fpm-group=www \ --with-libdir=/lib/x86_64-linux-gnu \ --enable-ftp \ --with-kerberos \ --with-gettext \ --with-xmlrpc \ --with-xsl \ --enable-opcache \ --enable-intl \ --with-pear \ --enable-fpm编译安装 make make install配置文件 核心 php.ini 配置文件cp php.ini-production /usr/local/php-8.3/etc/php.ini查看PHP版本/usr/local/php-8.3/bin/php -v PHP 8.3.0 (cli) (built: Dec 5 2023 20:03:56) (NTS) Copyright (c) The PHP Group Zend Engine v4.3.0, Copyright (c) Zend Technologies安装Python 安装Anaconda Anaconda 是一个开源的Anaconda是专注于数据分析的Python发行版本,包含了conda、Python等190多个科学包及其依赖项。 Anaconda就是可以便捷获取包且对包能够进行管理,包括了python和很多常见的软件库和一个包管理器conda。常见的科学计算类的库都包含在里面了,使得安装比常规python安装要容易,同时对环境可以统一管理的发行版本。 下载地址:https://www.anaconda.com/download#downloads wget https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh命令行中切换到anaconda文件所在目录 sh Anaconda3-2022.05-Linux-x86_64.sh accept the license terms--yes默认安装路径,/home/用户名/anaconda3=查看Anaconda版本 终端输入 conda --version 或者 conda -V /home/www/anaconda3/condabin/conda --version conda 23.7.4创建虚拟环境 $ conda create -n tinywan-python310 python=3.10 Collecting package metadata (current_repodata.json): done Solving environment: done ==> WARNING: A newer version of conda exists. <== current version: 23.7.4 latest version: 23.11.0 Please update conda by running $ conda update -n base -c defaults conda Or to minimize the number of packages updated during conda update use conda install conda=23.11.0 ## Package Plan ## environment location: /home/www/anaconda3/envs/tinywan-python310 added / updated specs: - python=3.10 The following packages will be downloaded: package | build ---------------------------|----------------- pip-23.3.1 | py310h06a4308_0 2.7 MB python-3.10.13 | h955ad1f_0 26.8 MB setuptools-68.0.0 | py310h06a4308_0 936 KB wheel-0.41.2 | py310h06a4308_0 109 KB ------------------------------------------------------------ Total: 30.5 MB The following NEW packages will be INSTALLED: _libgcc_mutex pkgs/main/linux-64::_libgcc_mutex-0.1-main _openmp_mutex pkgs/main/linux-64::_openmp_mutex-5.1-1_gnu bzip2 pkgs/main/linux-64::bzip2-1.0.8-h7b6447c_0 ca-certificates pkgs/main/linux-64::ca-certificates-2023.08.22-h06a4308_0 ld_impl_linux-64 pkgs/main/linux-64::ld_impl_linux-64-2.38-h1181459_1 libffi pkgs/main/linux-64::libffi-3.4.4-h6a678d5_0 libgcc-ng pkgs/main/linux-64::libgcc-ng-11.2.0-h1234567_1 libgomp pkgs/main/linux-64::libgomp-11.2.0-h1234567_1 libstdcxx-ng pkgs/main/linux-64::libstdcxx-ng-11.2.0-h1234567_1 libuuid pkgs/main/linux-64::libuuid-1.41.5-h5eee18b_0 ncurses pkgs/main/linux-64::ncurses-6.4-h6a678d5_0 openssl pkgs/main/linux-64::openssl-3.0.12-h7f8727e_0 pip pkgs/main/linux-64::pip-23.3.1-py310h06a4308_0 python pkgs/main/linux-64::python-3.10.13-h955ad1f_0 readline pkgs/main/linux-64::readline-8.2-h5eee18b_0 setuptools pkgs/main/linux-64::setuptools-68.0.0-py310h06a4308_0 sqlite pkgs/main/linux-64::sqlite-3.41.2-h5eee18b_0 tk pkgs/main/linux-64::tk-8.6.12-h1ccaba5_0 tzdata pkgs/main/noarch::tzdata-2023c-h04d1e81_0 wheel pkgs/main/linux-64::wheel-0.41.2-py310h06a4308_0 xz pkgs/main/linux-64::xz-5.4.5-h5eee18b_0 zlib pkgs/main/linux-64::zlib-1.2.13-h5eee18b_0 Proceed ([y]/n)? y Downloading and Extracting Packages Preparing transaction: done Verifying transaction: done Executing transaction: done # # To activate this environment, use # # $ conda activate tinywan-python310 # # To deactivate an active environment, use # # $ conda deactivate激活虚拟环境 conda activate tinywan-test查看已有的虚拟环境 $ conda env list # conda environments: # base /home/www/anaconda3 tinywan-test * /home/www/anaconda3/envs/tinywan-test进入虚拟环境查看Python版本 (tinywan-python310) www@xxxxxxx:~/anaconda3$ python --version Python 3.10.13安装phpy 下载 git clone https://github.com/swoole/phpy.git生成 ./configure 配置文件 /usr/local/php-8.3/bin/phpize --with-php-config=/usr/local/php-8.3/bin/php-config指定配置文件 ./configure --with-php-config=/usr/local/php-8.3/bin/php-config --with-python-dir=/home/www/anaconda3/envs/tinywan-python310 --with-python-version=3.10参数说明 --with-php-config PHP配置文件 --with-python-dir Python安装目录 --with-python-version Python版本号(只能使用次版本好,如:3.10.15,则填写3.10) 编译安装 make -j4 sudo make installphp.ini 扩展添加 安装成功后,修改 php.ini ,加入 extension=phpy.so vim /usr/local/php-8.3/etc/php.ini // 添加 extension=phpy.so执行 php -m 检查是否成功加载扩展。 $ php -m |grep phpy phpy使用 案例 os.php <?php function main() { $m = PyCore::import("os"); var_dump($m instanceof PyObject); $rs = $m->uname(); echo $rs; echo $rs->version; } main()查看当前操作系统版本执行结果 /phpy/examples$ /usr/local/php-8.3/bin/php os.php bool(true) posix.uname_result(sysname='Linux', nodename='iZbp1cqx6cq0t2gpl995gqZ', release='4.15.0-137-generic', version='#141-Ubuntu SMP Fri Feb 19 13:46:27 UTC 2021', machine='x86_64')#141-Ubuntu SMP Fri Feb 19 13:46:27 UTC 2021(tinywan-python310)其他 gcc 版本升级 ubuntu18.04的Gcc7.5.0升级到9.4.01、添加Ubuntu的测试工具链 (Toolchain) PPA。这个PPA包含了最新版本的GCC,包括GCC 9: sudo add-apt-repository ppa:ubuntu-toolchain-r/test2、更新你的包列表: sudo apt-get update sudo apt-get upgrade3、查看gcc所有版本 sudo apt-cache search gcc4、安装GCC-9: sudo apt install gcc-95、为了让你的系统默认使用GCC-9,你需要更新你的update-alternatives。首先,安装GCC-9为一个可选项 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90这个命令告诉 update-alternatives 系统 GCC-9 是一个可选项,并给它一个优先级 90 。优先级最高的版本将成为默认版本。如果安装成功会是这样的: gcc -v gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~18.04)
技术教程
# PHP
# Python
易航
1年前
0
257
0
2024-08-24
Love-Yi情侣网站存在SQL注入漏洞
FOFA介绍 部署在互联网上的网络设备资产信息搜索引擎。旨在尽可能多的对全球IT设备资 产进行信息收集、 漏洞扫描, 进而开展资产影响分析、漏洞影响分析, 为相关流行态势感知分析提供依据。 网址:https://fofa.info/ FOFA图片 漏洞复现 搜索 love-yi 再找到国内站点,访问速度快一点,提高渗透效率 图片 love-yi是一个记录情侣日常的恋爱网站,经某位程序员修改和设计之后,使其更加美观好看,适合哄女朋友开心,或者留作纪念。 图片 找到点点滴滴下的文章 图片 文章详细页面 图片 查看url,包含了一个id 图片 尝试注入,添加一个 ' ?id=6'查看源码,报错,存在SQL注入漏洞 图片 注入payload ?id=6' union select 1,2,3,4 -- qwe还是报错,而且文章内容也没了,说明该表字段不含4列,尝试5列 图片 ?id=6' union select 1,2,3,4,5 -- qwe正常显示,说明该表包含5个字段 图片 这里使用的union联结查询,他通常需要具备三个条件 选择的列数在两个查询中都是相同的。 数据类型在两个查询中都是兼容的。 第一个查询(即原始查询)不返回任何结果,或者你知道如何绕过它(例如,通过使WHERE子句始终为假)。 第三点中提到了原始查询不返回任何结果,得到payload ?id=-6' union select 1,2,3,4,5 -- qwe图片 注入成功,将2修改为如下payload // 拼接数据库版本,当前用户 concat(user(),database())图片 总结 由于作者更喜欢手工注入,因为手工注入更不容易被发现,灵活性,但是技术要求比较高,也比较耗时,使用SQL注入工具可以提高攻击效率和成功率,但也存在易被发现、受安全设备限制、需要特定环境、可能引发误报以及依赖工具更新等缺点。
技术教程
# MySQL
易航
1年前
0
140
1
2024-08-24
PHP 8.0:新时代的编程巨浪
随着技术的不断进步,PHP也在不断演化,迎来了它的8.0版本。这一版本不仅仅是数字的增加,更是PHP语言的一次重大飞跃。今天,让我们一起探索PHP 8.0的新特性,以及它如何为开发者带来前所未有的便利。 图片 PHP 8.0简介 PHP 8.0是PHP语言的最新主要版本,它引入了许多新特性和改进,包括JIT编译器、命名参数、联合类型、属性、改进的类型系统等。这些变化旨在提高性能、增强代码的可读性和可维护性。 PHP 7与PHP 8.0的差异 PHP 8.0在多个方面与PHP 7有所不同,以下是一些主要的差异: JIT编译器:PHP 8.0引入了Just-In-Time (JIT) 编译器,这使得PHP代码的执行速度有了显著提升。 命名参数:PHP 8.0允许开发者使用命名参数,这使得函数调用更加灵活和可读。 联合类型:PHP 8.0支持联合类型,允许一个变量或函数参数接受多种类型的值。 属性:PHP 8.0引入了属性(Attributes),这是一种新的元数据语法,可以用于注解类、方法和属性。 改进的类型系统:PHP 8.0对类型系统进行了改进,包括更严格的类型检查和新的类型声明。 PHP 8.0新增功能和方法 PHP 8.0带来了许多新功能和方法,以下是一些值得关注的亮点: 图片 JIT编译器:通过在配置文件中启用JIT,可以显著提高代码执行速度。 命名参数:允许在函数调用时指定参数名称,例如: htmlspecialchars($string, double_encode: false);联合类型:允许函数参数或返回值为多种类型之一,例如: function foo(int|float $number): int|float { return $number * 2; }属性:使用属性来注解代码,例如: #[Route("/api/items/{id}", methods: ["GET"])] function getItem($id) { // 你的代码 }Match表达式:提供了一种更简洁的switch语法,例如: $status = match ($statusCode) { 200 => 'OK', 404 => 'Not Found', default => 'Unknown', };入门指导 要开始使用PHP 8.0,你需要确保你的开发环境已经支持这个版本。你可以通过以下步骤来安装或升级到PHP 8.0: 检查当前版本:首先,运行以下命令来检查你当前的PHP版本: php -v升级到PHP 8.0:如果你的系统支持包管理器,你可以通过包管理器来安装或升级到PHP 8.0。例如,在Ubuntu上,你可以使用以下命令: sudo apt update sudo apt install php8.0代码案例 让我们来看一个简单的例子,展示PHP 8.0中的一些新特性: // 命名参数 htmlspecialchars($string, double_encode: false); // 联合类型 function foo(int|float $number): int|float { return $number * 2; } // 属性 #[Route("/api/items/{id}", methods: ["GET"])] function getItem($id) { // 你的代码 } // Match表达式 $status = match ($statusCode) { 200 => 'OK', 404 => 'Not Found', default => 'Unknown', };PHP 8.0优劣势 优势: 性能提升:PHP 8.0引入了JIT编译器,显著提高了执行速度。 代码简洁:命名参数和联合类型等新特性使得代码更加简洁和易读。 开发效率:属性和其他改进减少了样板代码,提高了开发效率。 劣势: 兼容性问题:升级到PHP 8.0可能会遇到一些兼容性问题,需要对现有代码进行适配。 学习曲线:新特性可能需要开发者花费时间去学习和适应。 使用方法和场景 PHP 8.0适用于所有希望提高性能和代码质量的PHP开发者。它特别适合以下场景: 高性能应用:对于需要快速响应和高吞吐量的应用,PHP 8.0的JIT编译器是一个巨大的优势。 现代化开发:PHP 8.0的新特性使得代码更加现代化,适合追求最新技术趋势的开发者。 注意事项 在使用PHP 8.0时,开发者需要注意以下几点: 兼容性测试:在升级之前,确保对现有代码进行充分的兼容性测试。 文档学习:深入学习PHP 8.0的新特性,充分利用其带来的优势。 结尾 亲爱的开发工程师们,PHP 8.0为我们带来了新的机遇和挑战。让我们拥抱变化,勇敢地迈向新时代。记住,技术的海洋无边无际,每一次升级都是我们航行的新起点。明天,我们将继续探索PHP 8.1的奥秘,敬请期待! 在这篇文章中,我们深入探讨了PHP 8.0的新特性,并提供了入门指导、代码案例和使用场景。希望这些信息能帮助你在开发旅程中做出明智的选择,并在技术的海洋中乘风破浪。
技术教程
# PHP
易航
1年前
3
305
2
2024-08-22
《黑神话·悟空》是用什么编程语言开发的?
最近这个“黑神话·悟空”真是火的一塌糊涂,这款被誉为中国第一款3A制作的单机游戏,凭借其惊艳的画面、流畅的战斗体验和深厚的文化内涵,属实是火出圈儿了,连央视、外交部都纷纷点赞了。 图片 关于这款游戏的制作和文化咱就不聊了,毕竟我也不是专业的,今天咱们聊聊另一个话题。 话说,你知道黑神话·悟空这款游戏是用什么编程语言开发的吗? 答案主要是C++(也用到C#和其他语言) 根据游戏开发公司游戏科学官网的显示,《黑神话:悟空》游戏使用的是虚幻引擎(Unreal Engine): 图片 而这个引擎的底层源码主要使用的就是C++。 图片 图片 开发这款引擎的是Epic Games,一家来自美国的游戏公司。 虚幻引擎属于开源项目,大家自己学习或者开发一些免费的东西是可以直接用的。但如果要开发像《黑神话:悟空》这样的商业产品,那就得给钱了。按照他们的协议,当产品销售超过100万$时,就要付5%的版税。 图片 悟空的销售早就超过这个数了,所以现在每多一个人购买这款游戏,就会有5%进入到这家公司的钱包里。当然这种算法可能有些粗糙,在不同平台还有平台抽成,但大体是这么个意思,每销售一次,就会有一笔钱进到这家公司的账户。 我在微博、知乎、公众号很多平台看到大家都在感叹,国内的游戏公司很少愿意投入到这样的3A游戏制作,投入太大、周期长、收益不确定,导致大家都更愿意做投入小、来钱快的网游、手游,做一些奶头乐的游戏,而这类游戏,往往很难承载起文化传播的重担。 确实是这样,过去的十几年里,中国的游戏开发者们大多集中在网游和手游领域,原因很简单——来钱快。网游可以通过内购和会员制等方式持续盈利,而手游更是凭借短平快的开发周期和庞大的用户基数成为了香饽饽。 每次看到这样的评论留言,我就想到咱们软件开发领域其实不是一样的吗? 在中国的软件开发行业,Java和Python几乎成为了开发者的首选。无论是互联网公司开发的各种应用,还是传统企业的信息系统,这两种语言无处不在。为什么它们如此受欢迎?原因很简单:Java和Python的学习门槛低,开发速度快,并且有丰富的生态系统和社区支持。这让企业能够迅速推出产品,抢占市场份额,迎合快速迭代的商业需求。 再来看C++,国内做C++开发的团队实在是太少了,企业想招聘一个合适的C++人员往往要付出更多的时间和成本。这里面有多方面的原因,一方面C++学习曲线陡峭,开发人员需要掌握内存管理、操作系统机制等复杂内容,不仅耗时,而且容易出错。其次,C++的开发周期较长,企业在如此内卷的市场下,也很难快速迭代,毕竟市场不等人。 于是多年下来,造成的局面就是,国内的软件开发主要集中在网站、APP、小程序等领域,很少有涉及底层的软件系统。各种工业软件、操作系统、游戏引擎、数据库、浏览器这些东西基本都是国外的东西。 我看到很多人期望《黑神话:悟空》能像一束光,照亮国内3A游戏的道路,有更多的公司和团队进入到这个领域。其实我也希望,国内有更多的C、C++这些编程语言的开发者,开发出各种基础设施软件,走向全球市场,未来别人用我们的东西,每卖出一份也能给我们交钱。而不只是像现在一样,做一些同质化严重的小程序和APP。 期望归期望,但坦率来讲,这很难,毕竟《流浪地球》五年过去了,如今也只有一个《流浪地球》。 商业和资本本质毕竟还是逐利的,尤其是国内的市场太过浮躁,大家更看重短期利益。别说公司和企业了,个人同样如此,很多人都期望培训班培训三个月,就能月薪上万进入大厂。 不过星星之火总好过一片暗淡,当《黑神话:悟空》这样的星星之火越来越多时,终究有燎原之日。 最后期望中国游戏产业和中国软件产业都能有美好的未来!
技术教程
# C++
易航
1年前
0
198
5
2023-01-05
网易云官方歌曲解析接口
单曲音频文件解析接口:http://music.163.com/song/media/outer/url?id=歌曲的ID
技术教程
易航
2年前
2
1,880
5
2022-12-19
iFrame父子相互获取对方DOM元素
父页面获取子页面dom的方法 /* 必须用onload */ window.onload = () => { const sonWindow = document.querySelector("iframe").contentWindow; const sonDiv = sonWindow.document.querySelector(".son") console.log(sonDiv); }子页面获取父页面dom的方法 /* 必须用onload */ window.onload = () => { const parentWindow = window.parent; const parentDiv = parentWindow.document.querySelector(".parent") console.log(parentDiv); }
技术教程
# Web前端
易航
3年前
1
88
0
上一页
1
...
10
11
12
...
16
下一页