日本核废水24日排海,未来恐蔓延至中国海域,如何应对!
文: CC情报局1. 据日媒报道,日本政府最早将于24日开始排放核废水。据德国科学海洋机构计算显示,57天内,辐射将扩散至太平洋大半区域;3年后,美国和加拿大将遭到污染;10年后,将蔓延至全球海域。其中韩国、中国两地将成为受核污水影响最严重的国家。2. 2011年3月11日,东日本大地震造成福岛核泄漏。至今为止,核泄漏已经造成福岛周围生物基因变异,发育畸形;海洋中鱼群辐射物质大幅超标;日本当地儿童群体中患甲状腺结节、囊肿占比过高。部分机构预测,核污染将在长期一段时间内造成癌症和重大疾病患者增加。3. 自福岛核泄漏事故以来,受损核电站的拆除工作一直在持续进行。尽管日本政府以及东京电力公司对外声称一直在开展核污水处理,但是却多次暗自排放核污水、虚报核污水处理效果、对日本内部和国际上提出的废水处理方案置之不理。核污水中大量放射性元素难以被处理,但日本政府及东电一直试图争取正式核污水排放。4. 福岛核泄漏事故不亚于上世纪苏联发生的切尔诺贝利核泄漏事故。当时,苏联短期内开展挖通地道、围堤水域、建立防护堤等有效措施,成功保护当地水资源免受核泄漏污染。日本内部也提出了很多的核废水处理方案,可是日本政府更愿意“一排了之”,从而减少人力、物力、财力等方面的支出。5. 中国政府已经多次明确反对日本政府强推排放核污水的计划。今年7月,中国海关明确下令禁止从日本福岛等受核污染影响地区进口食品;同时加大对于日本其他地区的食品,尤其对是水产品的查验,并声明持续加强对放射性物质的检测监测力度。据日本广播协会最新报道,在22日的内阁会议上,岸田政府决定,如果准备工作中没有出现问题,将在8月24日启动福岛第一核电站核污染水排海计划。▎8月20日,岸田文雄视察福岛第一核电站。争议12年后,福岛核核废水将被排入太平洋,十年间数次“故意”泄露,谁是主要受害国与地区?福岛核废水在蓄积12年后,历经多轮争议,在受到多国反对之后,仍将被排入太平洋!8月22日,据NHK报道,日本政府决定最早将于8月24日,将第一批稀释过后的核废水排入太平洋。值得注意的是,日本此次确定排放日期的决定,是在和美、韩领导人会谈后做出的。据CNN披露,虽然日本政府早有宣布敲定排放日期的计划,但为了避免激怒韩国,一直隐忍不发。而正是这次三方会面,韩国总统尹锡悦不顾国内反对仍然默许,坚定了日本排放的决心。▎8月18日,在戴维营峰会上,拜登、岸田文雄和尹锡悦在戴维营举行完新闻发布会后离开。此后,岸田首相于8月20日、21日连续两天赴福岛第一核电站视察。并与东京电力公司、日本全国渔业联合会(全渔联)和福岛县渔业联合会(福岛渔联)的干部会面,并就福岛核污染水的安全问题进行说明。但岸田首相访问当日,媒体曝出福岛第一核电站核污染水已发生大面积外泄。而早在今年5月,福岛核电站所属的日本东京电力公司就已经在事故地点附近的港湾,捕获到辐射超标的海鱼。东电表示,捕获到的许氏平鲉体内放射性铯的含量达到每千克18000贝克勒尔,达到日本食品卫生法所规定的标准值(每千克100贝克勒尔)180倍。今年4月,在同一地点还捕获了一条青鱼,其体内的放射性元素铯含量达到每千克1200贝克勒尔,是安全标准值的12倍。媒体曾质疑,福岛的核废水怀疑已经被人为偷偷排放,或者失控流入了大海。而日本做出的这一排放决定,可能将引发一场祸及全世界的生态灾难!2011年3月,9级强震以及伴随而来的海啸使福岛第一核电站严重受损,三个反应堆融毁。为冷却反应堆,必须持续用冷水降温。至今已经几乎将整个福岛核电站变成了核废水的水墓。它们被放置在密闭的1061个铁制罐子里。东京电力公司认为储罐将于2021年秋季以后达到极限。2021年4月13日,日本政府正式决定将福岛核污水经过滤并稀释后排放入太平洋。根据东京电力公司计划,将在2023年夏天正式开启福岛核污水排放。日本有关如何处理冷却产生的含氚核废水的讨论已维持数年。但这一决定再次遭到国际社会广泛质疑和反对,在日本国内也引发强烈担忧。▎福岛核电站的数千个装满核污水的铁罐。目前日本的计划是,福岛第一核电站储存的核废水先通过先进液体处理系统进行处理,去除放射性元素氚以外的几乎所有放射性物质。而氚是一种氢同位素,由于难以过滤,所以日本方面会将废水进一步稀释,使氚的含量低于影响环境的标准。这一标准经过了美国的背书,并认为没有核安全问题。据美国国家核管理委员会的一位发言人证实,美国几乎所有核电站,都向其所在的水域排放放射性水平较低的水。东电、日本政府和国际原子能机构共同认为,氚自然存在于环境中,从雨水到海水再到自来水,甚至在人体内,因此少量释放到海洋中应该是安全的。但这份报告随即遭到了日本国内的反对。日本龙谷大学教授大岛坚一就曾表示:东京电力公司只选取了第一核电站内很少部分的污染水进行测试,并且没有第三方核实,很难相信其数据的真实性。▎据德国科学海洋机构计算显示,从核废水排放的那天起:57天内,辐射将扩散至太平洋大半区域;3年后,美国和加拿大将遭到污染;10年后,将蔓延至全球海域。据法国核安全研究所(Institut de radioprotection et de sûreté nucléaire)于2011年10月发表的报告称,大约有27“PBq”铯-137释入大海。这是有史以来,观察到的最大量人造放射性物质释入大海。福岛海岸附近涌流着全世界最强劲的海流,传输污水远布太平洋,造成放射性物质大量流散。专门跟踪日本核废水排放的专家指出,废核水中的氚等放射性物质一旦排放到海洋中,就会伴随洋流而污染世界许多地方。一个月之内,整个太平洋地区都发现了放射性物质。核废水中的放射性物质对人体的危害无疑是巨大的。此外,废水中还存在其他致命的放射性物质,日本一直在隐瞒这些物质。但在2018年,当一些核专家对这些核废水进行检测时,他们发现处理后的废水中残留了许多放射性物质,例如碳14,钴60和锶90。显然,东京电力公司在撒谎。其后东电曾在2013年造成过多起向太平洋排放核污水事故。核专家肖恩·伯尼(Shaun Burnie)在《经济学人》上发文称,日本之前多次排放的核污水,以及这次存储的超过100万公升的污水,结果将使邻国暴露于辐射之中,尤其是韩国将遭受最大的影响,其间中国台湾地区也首当其冲。他声称,如果将100万吨的放射性水排放到海洋中,将需要17年的时间和7.7亿吨的水来稀释它,这些核污水会污染海洋,而且太平洋地区的国家会暴露在辐射下。在2011年毁灭性的地震和海啸造成的福岛核泄露之后,有15个国家和地区仍在限制日本农产品和渔业产品的进口超过10年。2015年,虽然日本政府声称福岛周边水产品已达到安全标准,但周边国家民众仍有疑虑。韩国和中国都予以进口限制。2019年4月,世界贸易组织仍支持韩国在福岛核电站辐射泄漏事故后对日本水产品施加的进口禁令和检测要求。日本将受核污染的水倾倒入太平洋引发了普遍的担忧与愤怒。日本的邻国,包括中国和韩国,将是第一批遭受严重污染的国家,而西方国家也很难与世隔绝。随着世界海洋的连通,迟早会有更多的国家受到核废水的伤害。 日本当地渔民担忧这给日本的渔业带来灭顶之灾,几乎所有的国家都可能会停止进口日本海鲜。这对日本将是巨大的打击。而中韩的海鲜市场也将会立即遭受波及。2011年福岛核灾期间,国内的海鲜市场遭受到重大打击,商家担忧再次受到波及。另外还造成了碘盐的脱销与恐慌。▎日本渔民在日本东京首相办公室外抗议,反对日本政府计划将福岛核电站核污水排入海中。据中国科学院电工研究所副研究员张子立对媒体称,按正常情况运行的核电机组,其中排出的废水经过一系列处理后,可达到现行排放标准。但是福岛第一核电站是发生过核泄漏事故的反应堆,其堆芯被熔毁后产生的核废水与正常运行状态下产生的核废水有本质区别。亚洲的海洋大部分是连通的,许多海洋是半封闭的,因此福岛水中的污染物可能消散然后上升,这将严重影响当地的海洋和沿海环境以及附近人们的健康。中国沿海与台湾地区、韩国,将不可避免遭受到这些核废水的污染,严重程度,仍需进行监测。据核专家肖恩·伯尔尼(Shaun Burnie)的调查,此前人们认为,东海在2011年福岛核灾难期间并未受到严重的铯污染,但南京大学在2018年的模型显示从2011年到太平洋的铯排放量到2013年已广泛传播到东海,并在2019年达到峰值。水中将排放的许多放射性核素有可能对人类和非人类DNA造成损害。福岛核电站的水处理方法不能去除tri或碳14,也不能去除所有其他放射性同位素,例如90锶,129碘,16钴。世卫专家警告说,如果这些放射性核素在环境中长期存在,它们将逐渐进入食物链。▎东京电力公司的一名工作人员在测量福岛核电站的辐射水平。福岛核灾难未公布的几个数据:受核辐射的遗传基因已出现,35%的儿童患有甲状腺疾病,年增近十万癌症病人?2011年3月11日,一场大地震袭来,引发了毁灭性的海啸。这又引发了自切尔诺贝利以来最严重的核事故。这次地震震级为9.0级,是全球有记录以来最强的地震之一。▎2011年3月16日,福岛核电站事故现场。地震使日本本州主岛向东移动了2.40米。 据说连地球地轴都因地震而偏移了十多厘米。德国之声曾刊发了关于福岛核电站泄露的几个关键数据,这场海啸造成了18426人死亡和失踪,位于海边的福岛第一核电站被近15米高的水墙袭击。该厂的发电设备被淹,并导致冷却系统失灵。六个反应堆中的三个发生了熔毁。 在随后的几天里,1号和3号反应堆发生了几次氢气爆炸。▎2017年6月30日,在东京东京地方法院对前三名东京电力公司高管进行首次审判之前,人们集会抗议这家公司。灾难发生后,政府立即宣布福岛核电站方圆20公里范围内为疏散区。住在这个 "禁区 "的人被命令离开这个地区。方圆20公里外的许多人也决定逃离。至今仍有面积约为337平方公里地方被画为核禁区。日本处于放射性物质辐射的笼罩中,尽管日本政府认为这些放射性物质对于人们的影响微乎其微。但科学家们并不赞同他们的看法。▎2011年福岛核事故后,身穿防护衣的工作人员为儿童检查辐射迹象。国际医生防止核战争联盟(IPPNW)的辐射专家艾森贝格发表了一份关于受核辐射致残的遗传基因的报告,他认为福岛核难泄露的核辐射致使当地许多蝴蝶的基因突变,发育畸形。一旦哪里的灰蝶患病,就意味着当地的整个生态环境系统出了什么问题,因为切尔诺贝利核事故之后,那里也出现了类似情况。联合国原子辐射效应科学委员会(UNSCEAR)的一项研究报告表明,对日本4万名儿童所做的甲状腺超声波检查结果表明,其中35%的儿童的甲状腺都有结节和囊肿。"一般来说,儿童是不会有的。"身为儿科医生的艾森贝格认为这个现象令人警觉。艾森贝格和几名同行一起向日本政府申请查阅福岛核难后有关新生儿的统计数据,但他们迄今没有得到许可。▎2011年3月,进入事故现场参与日本福岛核电站维修的一名焊工在患有白血病后,将核电站的总公司东京电力告上法庭讨说法。日本有隐瞒灾难以及不利数据的传统。这个机构认为,日本目前公布的患癌人数并不是一个公平透明的数据,他估计,放射造成的癌症及其他的疾病的爆发,是一个长期的过程。预测将会增加近二十多万名癌症与重大疾病患者。这位科学家担心,核辐射污染也会导致人类畸胎和患病数量的增多。尽管至今日本政府因保密的理由,没有给他提供任何数据。福岛的核污水从那里来的?东京电力公司:每天喝两升都没事?核事故发生十年后,受损核电站的拆除工作仍在缓慢进行,至少还需要三四十年。另一项核灾难带来的重大问题是,为了冷却已经损毁的福岛第一核电站的核反应堆堆芯,东京电力公司(TEPCO)这些年来已经使用了数以万吨计的处理水,而这些流经已损毁反应堆的废水,都被储存起来。福岛第一核电站已蓄积123万吨核污水,其中放射性同位素碳-14和其他放射性物质的含量之高已经相当“危险”。然而日积月累下来,储存这些废水的空间已经告急。但东电则一直采取各种措施,私自向太平洋排放核污水。有据可查的是,在2013年7月,8月核电厂内的放射性污水被人为泄漏流入太平洋,当地渔民与核监督机构的专家早就怀疑会发生这些问题。但东电却坚决否认这问题的存在。8月20日,核电厂又发生一起事件,多达300吨的高放射线浓度污水从污水储存槽外泄。这些污水足以危害附近员工的健康。这次污水外泄事故被评为国际核事件分级表中的第三级。其后东电声称,导致福岛第一核电厂蓄水罐大量泄漏放射性污水的原因是由于蓄水罐变形。东电的推诿以及日本政府的默允,遭到了国际社会的强烈批评。经过2013年的多次外泄后,日本政府投入470亿日元的阻止污水外泄方案。东电推出一套“多核素除污设备(ALPS)”,声称能够将放射性物质含量“降至低于容许排放的水平”。然而,这家声名不佳的公司在2020年9月承认,用于处理含有核污水的1,000个储水罐,未能将放射性物质去除至低于法定标准值,至今那些污水仍有高达80%的放射性物质浓度,其中包括锶-90这种被认为可致癌的亲骨性放射核素也超标,而且出水管每星期都会新增2吨至4000吨核污水,也就是基本上这问题是无法完全解决的。据日媒称,东电至少在5年前就发现这个技术不如预期,却一直隐瞒到去年9月才公布,而他们当初采用ALPS是基于成本考虑,而并未采用针对辐射污染物最有效的方式。日本有关如何处理冷却产生的含氚核废水的讨论已维持数年。日本经济产业大臣梶山弘志提到,“为避免福岛第一核电站退役进程遭到延迟,需要就如何处理日益增多的核废水的问题做出决策”。但日媒认为,东电处理核废水并不“真诚”,“一部分被抽到了特质储水罐,剩下的就全在反应堆里泡着。”提出这一议题是东电游说政府,核电站内储存空间不足,再发生2013年的所谓泄露事件,他们无法负责。“日本经济产业省一直在进行技术评估,以排放或管理被污染的水。该部专责小组提出了五种处理废水的方法,并建议将其排放进海洋”,韩国环保专家张在四曾在韩国时报采访时称。“我们一直在向日本政府发出警告,警告可能会导致污染物排放,但这些后果都被忽略了。” 多年来,韩国政府一直在要求日本政府分享福岛的放射性水平信息,但后者拒绝这样做。自2015年以来,这里沿海地区的辐射水平迄今未显示太大变化。面对公众的质疑,福岛核电站的运营方东京电力公司则表示,相关核废水不会对人类健康造成威胁。该公司一名发言人在接受CNN采访时表示,福岛核废水测量得出的碳-14浓度在每升2到220贝克勒尔之间,“这些水即使每天喝下去2升,每年接受的放射性物质也不过是0.001到0.11毫西弗之间,这个剂量是不会对身体健康造成损害的。”这位发言人还表示,东京电力公司会对这些废水进行二次处理,使其“符合含氚废水排放的标准”,也会尽可能降低废水中的碳-14等其它放射性物质含量。氘(dāo)与氚(chuān),都属于氢的同位素。其中氘的获取十分容易,海水中平均每6420个氢中就能找到一个氘原子。这也是核聚变的燃料。但氚不易被分解,且辐射较小,所以只能排放到海里。与福岛核事故同级别的切尔诺贝利核电站事故,苏联人是如何处理的?为何日本不肯借鉴?核专家其实早在数年前,就提出日本应借鉴切尔诺贝利核电站事故,苏联人处理的模式,来处理同级别的福岛核事故的相关问题,包括核污水。1986年4月26日,切尔诺贝利核电站发生严重泄露事故。在救灾现场,苏联科院院士韦利霍夫判断,熔融的核材料会渗入到地下水,后果不堪设想,必须提早处置,他建议:在反应堆机房下设置冷氮注入系统,把地基下的水抽干,建造一个大型混凝土隔板,同时修建人工散热管道,在隔板上安装平板式交换器。苏联矿工中的一万多志愿者,用45天时间,挖通了地道。同时数万名部部队官兵对事故地区水域进行围堤,在1500平方公里土地上,建起了130个防护堤。直到今天,普里比亚河、第聂伯河水质依然达标,也保护了乌克兰,保护了整个欧洲。但日本几乎没有看过这个事故处理的模版。著名的核专家布尔尼称,日本如果使用类似的模式,至少可以将百分之八十的核污水处理好,而不使其渗露,造成不可逆的核灾难。日本并非没有专家提出过这个类似的议案。日本FoE Japan等多个环保团体曾在数年前向经济产业省提交签名联署,要求采取不同处理方式,例如保管在储存罐中或者用水泥固化,总计提交了6.4万份签名。但这个建议日本政府一开始就置之不理,因为这比一排了之,要花费更多的资金与人力,相比为这个错误的决策,内阁出来一鞠躬、再鞠躬,这根本就不是一个事。FoE Japan事务局长满田夏花抨击日本政府,“这是未经充分讨论粗暴的决定方式。将会给人类带来不可挽回的灾难。”对于日本强推核污染水排入大海计划,中方已多次明确反对。今年8月9日,中国外交部发言人表示,中方一贯反对日本强行向海洋排放福岛核污染水,向全世界转嫁核污染风险。日本政府应履行应尽的道义责任和国际法义务,停止强推排海计划,以真正负责任的态度和安全有效的方式处置福岛核污染水,并接受严格国际监督,避免给全球海洋生态和人类健康造成无法挽回的伤害。今年7月,为防范受到放射性污染的日本食品输华,中国海关下令禁止进口日本福岛等10个县(都)食品,对来自日本其他地区的食品特别是水产品(含食用水生动物)严格审核随附证明文件,严格实施100%查验,持续加强对放射性物质的检测监测力度。日本放水,邻国殃及。史上最难预测的一场生态灾难,恐已酿成!转载:https://baijiahao.baidu.com/s?id=1774903775186200080&wfr=spider&for=pc
查看详情点赞1评论收藏1浏览1332023-08-25 12:49:15起底日本核污染水排海计划 ,全球海洋环境危机已现
当地时间2023年8月24日,航拍日本福岛第一核电站。东京电力公司宣布,已于当天下午1点开始将储存在核电站内的处理过的水排入海洋。福岛核污染水于8月24日开始排入海洋。这一排污进程将持续数十年。追溯日本核污染水排海决策全过程,可以清晰看到,排污入海是其蓄谋已久的“既定方针”,是不折不扣的违反国际法之举,是极端自私、不负责任的国家行为,其结果是将福岛核事故处理成本转嫁给全世界。当地时间2011年3月14日,日本经济产业省原子能安全和保安院宣布,福岛第一核电站3号机组当地时间11时01分发生爆炸,反应堆所在建筑遭到损坏,但放置反应堆的容器没有损坏。(视频截屏组合图)福岛第一核电站自2011年3月发生严重事故以来,因用水冷却熔毁堆芯以及雨水和地下水等流过,每天产生大量高浓度核污染水。2011年4月,核电站运营方东京电力公司故意将核污染水排入大海,引发社会高度关注和担忧。同年12月,东电表示已制定一份“低浓度污染水”排海计划。2011年3月20日,日本,爆炸后的福岛第一核电站3、4号机组航拍图。2013年3月,东电处理核污染水的关键设施“多核素处理系统”(ALPS)投入试运行,但此后不断出现问题:频繁漏水,2018年被曝经过处理后的水中锶等放射性物质仍超标,2021年被发现用于吸附放射性物质的排气口滤网近半数损坏……当地时间2013年11月7日,日本福岛县,日本东电公司公布即将取出核燃料的福岛一号核电站4号反应堆内部照片。当地时间2013年11月7日,日本福岛县,日本东电公司公布有关福岛核泄漏的处理画面。自从ALPS投入运行后,日方就把经过处理的核污染水称为“处理水”。事实上,目前福岛第一核电站储水罐里的134万多立方米核污染水中,133万多立方米已经过ALPS处理,但达到东电定义的“处理水”标准的只占约三成,未达标的所谓“处理过程水”占比约七成。另有近9000立方米核污染水尚未经过ALPS处理。 而这些“处理水”的最终去向又该如何解决?早在2013年12月,日本核能主管部门经济产业省就设立工作小组就“处理水”排放问题进行技术探讨。当地时间2014年5月21日,日本东京电力公司按照“地下水迂回排放计划”开始将此前抽取的560吨地下水排入大海,全程预计耗时2个小时左右。2016年6月,该工作小组发布报告称,经过对海洋排放、地下掩埋(加入水泥等固化后埋入地下)、地层注入(用管道注入地层深处)、蒸汽释放(气化为水蒸气排入大气)、氢气释放(电解为氢气排入大气)等5种方法的评估,将“处理水”稀释后排海是“成本最低”的方法。这份报告为后来的排海方案定了调,但公布后遭到日本农林渔业等团体的强烈反对。据日本媒体披露的消息显示,福岛第一核电站反应堆附近的辐射量超过每小时100微西弗,显示出尽管事故已经过去5年,但核电站内部的辐射量依然很高。东京电力公司的员工穿防辐射服作业。当地时间2016年2月22日,日本福岛第一核电站,东京电力公司的员工穿防辐射服作业。2017年7月,经产省在福岛市举行“废炉与污染水对策当地协调会议”,摆出要与当地协商的姿态。但时任东电会长川村隆在会前对媒体声称东电已就排海“做出判断”,引发社会广泛不满。为说服公众,日本政府成立了一个有相关领域专家参加的委员会。2018年8月,该委员会在福岛和东京举行听证会,名义上是听取民众意见,但实际上是要为排海方案背书。听证会上,日本原子能规制委员会时任委员长更田丰志有关“排海是唯一可行选项”的说法遭到各方质疑。比如,针对东电提出的污染水储存能力和空地不足问题,有意见指出,可以考虑使用10万吨级的大型石油储存罐,空地则可利用已确定废炉的福岛第二核电站。针对核污染水处理的技术难度问题,有意见提到,可以采用1979年美国三里岛核事故曾经用过的水蒸气排放方式。还有意见指出,ALPS无法去除的放射性元素氚的分离技术正在研究中,应在该技术成熟并应用后再排放。当地时间2021年4月12日,日本,航拍福岛第一核电站核污水仓。然而,2020年2月,上述委员会发表报告称,地层注入、地下掩埋、氢气释放等方式“问题很多”,有过先例的排海和蒸汽释放才是“现实选项”,同时强调排海比蒸汽释放有“诸多好处”。2021年4月,日本政府无视国内外反对意见,单方面宣布将在2023年实施核污染水排海。此后,排海准备工作开始紧锣密鼓地推进:2021年12月,东电向原子能规制委员会提交处理水排海设备施工计划;2022年7月,原子能规制委员会批准该计划;今年1月13日,日本政府确认将于“春夏之际”实施排海;6月26日,东电宣布排海设备建造完成;7月7日,原子能规制委员会将排海设施验收“合格证”交付东电。当地时间2022年3月3日,日本福岛,身穿防护服的工人正在安装从受污染的水中清除放射性物质的设备。当地时间8月24日下午,日本启动福岛第一核电站核污水排海,核污水经由1公里的海底隧道流向太平洋。当地时间2023年8月24日,日本福岛第一核电站开始将核污染水排入海洋。图文来源:新华社、央视新闻客户端、视觉中国、澎湃影像来源: https://www.thepaper.cn/newsDetail_forward_24348753
查看详情点赞1评论收藏浏览1312023-08-25 11:26:37PHP 处理无限极分类数据通用方法
在工作中,我们经常会遇到处理多级分类的问题,我们常见的是三级,定义一个字段pid,查询的时候一级一级查询数据数据,这样也是可以解决问题。只是不够灵活,所以就有了无限极,不管有多少级菜单都能很好的快速处理。下面是PHP中无限极分类的处理方法:/** * 处理无限极分类通用方法 */ public function tree($list=[], $pk='id', $pid = 'pid', $child = '_child', $root = 0): array { // 创建Tree $tree = array(); if(is_array($list)) { // 创建基于主键的数组引用 $refer = array(); foreach ($list as $key => $data) { $refer[$data[$pk]] =& $list[$key]; } foreach ($list as $key => $data) { // 判断是否存在parent $parentId = $data[$pid]; if ($root == $parentId) { $tree[] =& $list[$key]; }else{ if (isset($refer[$parentId])) { $parent =& $refer[$parentId]; $parent[$child][] =& $list[$key]; } } } } return $tree; }$list:是直接读取数据库数据。给这个方法处理
查看详情点赞1评论收藏浏览1262023-08-11 10:01:52phpquery 使用方法
最近在做静态页生成项目中,需要先对HTML内容进行解析数据插入和内容替换等操作,最开始想到全部用正则来解决,测试了下html结构太复杂了。全部用正则不显示。然后想到把html转成对象来操作,正好查了一下gpt,有很多库可以来解析HTML。现在用的后端语言是PHP。下面可以用的几个库1、DomDocument:这是PHP自带的内置类,可以解析和操作HTML文档,提供了许多强大的方法和函数。它的文档对象模型(DOM)适用于大多数HTML解析和替换任务。2、Simple HTML DOM:这是一个第三方库,提供了一组简单易用的方法来解析和操作HTML文档。它类似于jQuery,可以使用CSS选择器来遍历和操作HTML元素。3、PHPQuery:这是一个强大的第三方库,可以将HTML文档转换为类似于jQuery语法的对象模型。它提供了许多方便的方法和函数,使HTML解析和替换变得更加简单和灵活。4、Simplepie:这是一个针对RSS和Atom等XML文档的组件,但它也可以用于解析HTML文档。它提供了一组易用的方法和函数,用于解析和替换HTML标记和内容。最开始我用的是Simple HTML DOM,但是在使用过程中发现,某些节点内容替换不了,节点原始内容我也打印出来了,需要替换掉内容也打印出来,都没问题,就是替换不了。最终没找到原因,所以我改成用PHPQuery,同样的操作最后解决了。怎么说,使用上来说,PHPQuery要顺手一些。phpQuery库下载地址: https://code.google.com/archive/p/phpquery/downloads (需要翻墙)我下载了一份到阿里云盘,可以直接用phpQuery: https://www.aliyundrive.com/s/WCB2NR7sdCm 提取码: w01k 引入phpquery类库//直接引入 include 'phpQuery/phpQuery.php';类似laravel框架引入方法://1、首先在app目录下创建一个新的文件夹,命名libs(可自定义),在libs下再创建一个phpQuery文件夹 //2、找到根目录下的composer.json文件 //3、找到composer.json中定义的 "autoload": { "classmap": [ "database", "app/libs/phpQuery" //加上 ], "psr-4": { "App\\": "app/" } }, //composer加载文件 composer dumpautoload使用方法加载文件 newDocument<?php header("Content-Type: text/html;charset=utf-8"); require('phpQuery/phpQuery.php'); /*通过读取URL或则文件路径 返回值是该网站或文件的html,一个网页对应着一个html文件*/ /*eg 1*/ $eg1=phpQuery::newDocumentFile("test.htm"); /*eg 2*/ $eg2=phpQuery::newDocumentFile("http://www.baidu.com"); //可以通过echo htmlentities($eg1,ENT_QUOTES,"UTF-8");查看返回值。注意htmlentities()函数可以输出原始html代码。 /*eg 3*/ //读入html $html="<div> <ul> <li>第一行</li> <li>第二行</li> </ul> </div"; $eg3=phpQuery::newDocument($html);//输入入参数为html ?> 【基本选择器】 #id 根据给定的ID属性匹配单个元素。 element 根据给定的名称匹配所有符合的元素。 .class 根据给定的class匹配所有的元素。 * 选择所有元素。 selector1, selector2, selectorN 根据所有制定的选择器匹配结合结果 选择结果是取并集/* 基本选择器*/ 1) #id pq("#myDiv"); 2) element pq("div"); 3) .class pq(".myClass"); 4) * pq("*") 5) selector1,selectorN pq("div,span,p.myClass") 【层次选择器】 ancestor descendant 匹配由先祖指定的元素的后代指定的所有后代元素。 parent > child 匹配由父元素指定的子元素指定的所有子元素。 prev + next 根据指定的”next”和指定的”prev”匹配所有的下一个元素。 prev ~ siblings 匹配根据”prev” 元素的 所有相邻元素。/* 层次选择器*/ 1) ancestor descendant pq("form input") 2) parent > child pq("form > input") 3) prev + next pq("label + input") 4) prev ~ siblings pq("form ~ input")【基础过滤 】 :first 匹配第一个被选择的元素。 :last 匹配最后一个被选择的元素。 :not(selector) 匹配所有不是被选择的元素。 :even 匹配所有被选择的偶数元素,0索引。 :odd 匹配所有被选择的奇数元素,0索引。 :eq(index) 匹配等同于给定的索引的元素。 :gt(index) 匹配大于给定的索引的元素。 :lt(index) 匹配小于给定的索引的元素。 :header 匹配所有header元素,如h1,h2,h3等。 :animated 匹配正在进行动画效果的元素。/*基础过滤*/ 1) :first pq("tr:first") 2) :last pq("tr:last") 3) :not(selector) pq("input:not(:checked)") 4) :even pq("tr:even") 5) :odd pq("tr:odd") 6) :eq(index) pq("tr:eq(1)") 7) :gt(index) pq("tr:gt(0)") 8) :lt(index) pq("tr:lt(2)") 9) :header pq(":header").css("background", "#EEE"); 【内容过滤】 :contains(text) 匹配包含指定文本的元素。 :empty 匹配所有无子节点的元素(包括文本节点)。 :has(selector) 匹配至少包含一个对于给定选择器的元素。 :parent 匹配所有父元素 - 拥有子元素的,包括文本。/*内容过滤*/ 1) :contains(text) pq("div:contains('John')") 2) :empty pq("td:empty") 3) :has(selector) pq("div:has(p)").addClass("test"); 4) :parent pq("td:parent") 【属性过滤】 [attribute] 匹配给定属性的元素。 [attribute=value] 匹配给定属性等于确定值的元素。 [attribute!=value] 匹配给定属性不等于确定值的元素。 [attribute^=value] 匹配给定属性是确定值开始的元素。 [attribute$=value] 匹配给定属性是确定值结尾的元素。 [attribute*=value] 匹配给定属性包含确定值的元素。 [selector1selector2selectorN] 匹配给定属性并且包含确定值的元素。1) [attribute] pq("div[id]") 2) [attribute=value] pq("input[name='newsletter']").attr("checked", true); 3) [attribute!=value] pq("input[name!='newsletter']").attr("checked", true); 4) [attribute^=value] pq("input[name^='news']") 5) [attribute$=value] pq("input[name$='letter']") 6) [attribute*=value] pq("input[name*='man']") 7) [selector1][selectorN] pq("input[id][name$='man']") 【子元素过滤 】 :nth-child(index/even/odd/equation) 匹配所有是父元素的第n个的子元素,或者是父元素的偶数或者奇数子元素。 :first-child 匹配所有是父元素的第一个的子元素。 :last-child 匹配所有是父元素的最后一个的子元素。 :only-child 匹配所有是父元素唯一子元素的子元素。1) :nth-child(index/even/odd/equation) pq("ul li:nth-child(2)") 2) :first-child pq("ul li:first-child") 3) :last-child pq("ul li:last-child") 4) :only-child pq("ul li:only-child") 【基于表单 】 :input 匹配input, textarea, select和button元素。 :text 匹配所有类型为text的input元素。 :password 匹配所有类型为password的input元素。 :radio 匹配所有类型为radio的input元素。 :checkbox 匹配所有类型为checkbox的input元素。 :submit 匹配所有类型为submit的input元素。 :image 匹配所有类型为image的input元素。 :reset 匹配所有类型为reset的input元素。 :button 匹配所有类型为button的input元素和button元素。 :file 匹配所有类型为file的input元素。 :hidden 匹配所有类型为hidden的input元素或者其他hidden元素。1) :input pq(":input") 2) :text pq(":text") 3) :password pq(":password") 4) :radio pq(":radio") 5) :checkbox pq(":checkbox") 6) :submit pq(":submit") 7) :image pq(":image") 8) :reset pq(":reset") 9) :button pq(":button") 10) :file pq(":file") 11) :hidden pq("tr:hidden") 【表单过滤 】 :enabled 匹配所有可用元素。 :disabled 匹配所有不可用元素。 :checked 匹配所有被勾选的元素。 :selected 匹配所有被选择的元素。1) :enabled pq("input:enabled") 2) :disabled pq("input:disabled") 3) :checked pq("input:checked") 4) :selected pq("select option:selected") 【attr属性获取】 attr($name) 访问第一个给名称的元素的属性。这个方法可以很轻易地取得第一个匹配到的元素的属性值。如果这个元素没有对应名称的属性则返回undefined。 attr($properties) 对于所有匹配到的元素设置对应属性。 attr($key, $value) 对于匹配到的元素设置一个属性和对应值。 attr($key, $fn) 对于匹配到的元素设置一个属性和需要计算的值。 removeAttr($name) 对匹配到的元素移除给定名称的属性。 addClass($class) 对匹配到的元素添加一个给定的类。 hasClass($class) 如果有至少一个匹配到的元素包含给定的类则返回true。 removeClass($class) 对匹配到的元素移除给定名称的类。 toggleClass($class) 对匹配到的元素,如果类不存在则添加,如果存在则移除。1) attr pq("img")->attr("src"); 2) attr(properties) pq("img")->attr({ src: "test.jpg", alt: "Test Image" }); 3) attr(key,value) pq("img")->attr("src","test.jpg"); 4) attr(key,fn) pq("img")->attr("title", function() { return this.src }); 5) removeAttr(name) pq("img")->removeAttr("src"); 6) addClass(class) pq("p")->addClass("selected"); 7) removeClass(class) pq("p")->removeClass("selected"); 8) toggleClass(class) pq("p")->toggleClass("selected"); 【HTML获取】 html() 获取第一个匹配到的元素的html内容(innerHTML)。这个方法不适用于XML文本(但适用于XHTML。) html($val) 对匹配到的元素设置html内容。这个方法不适用于XML文本(但适用于XHTML。)1) html() pq("div")->html(); 2) html(val) pq("div")->html("<p>Hello Again</p>");【text获取】 text() 获取匹配到的所有元素的文本内容。 text($val) 对匹配到的所有元素设置文本内容。1) text() pq("p")->text(); 2) text(val) pq("p")->text("<b>Some</b> new text.");【Value 获取】 val() 获取匹配到的第一个元素的value属性的值。 val($val) 对匹配到的元素设置value值。val($val) 所有的Checks, selects, radio buttons, checkboxes,和select options都会设置相应给定的值。1) val() pq("input")->val(); 2) val(val) pq("input")->val("hello world!")【其他筛选和文档处理】\*筛选*\ 1) eq(index) pq("p")->eq(1) 2) hasClass(class) pq("div")->hasClass("protected") 3) filter(expr) pq("p")->filter(".selected") 4) filter(fn) pq("p")->filter(function($index) { return pq("ol", pq($index))->size() == 0; }); 5) is(expr) pq("input[type='checkbox']")->parent()->is("form") 6) map(callback) pq("p")->append(pq("input").map(function(){ return pq(this)->val(); })->get()->join(", ")); 7) not(expr) pq("p")->not(pq("#selected")[0]) 8) slice(start,[end]) pq("p")->slice(0, 1)->wrapInner("<b></b>"); 9) add(expr) pq("p")->add("span") 10) children([expr]) pq("div")->children() 11) contents() pq("p")->contents()->not("[@nodeType=1]").wrap("<b/>"); 12) find(expr) pq("p")->find("span") 13) next([expr]) pq("p")->next() 14) nextAll([expr]) pq("div:first")->nextAll()->addClass("after"); 15) parent([expr]) pq("p")->parent() 16) parents([expr]) pq("span")->parents() 17) prev([expr]) pq("p").prev() 18) prevAll([expr]) pq("div:last")->prevAll()->addClass("before"); 19) siblings([expr]) pq("div")->siblings() 20) andSelf() pq("div")->find("p")->andSelf()->addClass("border"); 21) end() pq("p")->find("span")->end() \*文档处理*\ 1) append(content) pq("p")->append("<b>Hello</b>"); 2) appendTo(content) pq("p")->appendTo("#foo"); 3) prepend(content) pq("p")->prepend("<b>Hello</b>"); 4) prependTo(content) pq("p")->prependTo("#foo"); 5) after(content) pq("p")->after("<b>Hello</b>"); 6) before(content) pq("p")->before("<b>Hello</b>"); 7) insertAfter(content) pq("p")->insertAfter("#foo"); 8) insertBefore(content) pq("p")->insertBefore("#foo"); 9) wrap(html) pq("p")->wrap("<div class='wrap'></div>"); 10) wrap(elem) pq("p")->wrap(pq("#content")); 11) wrapAll(html) pq("p")->wrapAll("<div></div>"); 12) wrapAll(elem) pq("p")->wrapAll(pq("#content")); 13) wrapInner(html) pq("p")->wrapInner("<b></b>"); 14) wrapInner(elem) pq("p")->wrapInner(pq(".content")); 15) replaceWith(content) pq("p")->replaceWith("<b>Paragraph. </b>"); 16) replaceAll(selector) pq("<b>Paragraph. </b>")->replaceAll("p"); 17) empty() pq("p")->empty(); 18) remove([expr]) pq("p")->remove(); 19) clone() pq("b")->clone()->prependTo("p"); 20) clone(true) pq("button")->clone(true)->insertAfter(pq("b")) 示例:$phpQueryDom=phpQuery::newDocument($html); $itemDom=$phpQueryDom->find("blockitems").eq(0); $block = ""; $blockDom =$itemDom->find('[blockitem]')->eq(0); //循环产品数据 foreach ($product as $pro){ $blockDom->find("[blocktitle]")->text($pro->title); $blockDom->find("a")->eq(0)->attr("href","/product/".$pro->id); $blockDom->find("[blockimagetype]")->attr("src",$this->getImageUrl(json_decode($pro->thumb)->url)); $blockicotypeUrl = $this->getImageUrl(json_decode($pro->icon)[0]); $blockDom->find("[blockicotype]")->attr("style","background-image:url('.$blockicotypeUrl.');background-position:center !important;"); $block.=$blockDom->htmlOuter(); } $isBlockitems = $itemDom->attr("blockitems"); //判断blockitems属性是否在当前节点上 if ($isBlockitems !== null){ $itemDom->html($block); }else{ $itemDom->find("[blockitems]")->eq(0)->html($block); }参考链接: https://blog.51cto.com/lxw1844912514/2941913 https://code.google.com/archive/p/phpquery/downloads https://www.lmlphp.com/user/57840/article/item/2351270/
查看详情点赞1评论收藏浏览1732023-07-26 14:09:39一款优雅方便的【思维导图】,博主吐血推荐!
今天给大家推荐一款非常优雅的思维导图,和百度脑图一样。都是基于kityminder的百度开源脑图工具。为什么使用它?1、界面非常好看,外观有很多种选择2、速度非常快,编辑也非常丝滑3、可以保存到后台个人思维脑图管理中心,不管在哪里只有有网都可以拿出电脑随时随地打开它。极大的方便了工具。4、不想让其他人访问你的思维导图,可以设置成私密,这样别人就无权访问。也可以设置成公开,让其他所有人浏览。如果只想让某一部分人查看,那你可以设置成分享。通过密码的方式分享亲朋好友查看。5、可以不用本地安装脑图工具,节省电脑硬盘和内存。不用本地打开软件6、说了那么多,主要是这款脑图开源免费,重点是免费。7、工具地址:http://www.alingfeng.cn/tools/flow下面是一些截图:后台思维导图个人管理中心外观很多,都很漂亮。大家可以自行研究喜欢哪款。
查看详情点赞1评论1收藏浏览2212023-07-20 09:56:23php HTML解析库用法,PHP玩转HTML(SimpleHtmlDom)
我们在生成静态页中,经常会遇到需要处理html文档,里面需要用到很多节点,插入各种动态数据,修改各种内容。我们首先想到用正则匹配内容然后修改,这样也可以的。今天我们学习一个PHP的HTML解析库,用它来处理html文档。A HTML DOM parser written in PHP - let you manipulate HTML in a very easy way! This is a fork of PHP Simple HTML DOM Parser project but instead of string manipulation we use DOMDocument and modern php classes like "Symfony CssSelector".PHP 7.0+ & 8.0 SupportPHP-FIG StandardComposer & PSR-4 supportPHPUnit testing via Travis CIPHP-Quality testing via SensioLabsInsightUTF-8 Support (more support via "voku/portable-utf8")Invalid HTML Support (partly ...)Find tags on an HTML page with selectors just like jQueryExtract contents from HTML in a single line引入:使用composer下载库composer require voku/simple_html_dom composer require voku/portable-utf8使用:use voku\helper\HtmlDomParser; require_once 'composer/autoload.php'; ... $dom = HtmlDomParser::str_get_html($str); // or $dom = HtmlDomParser::file_get_html($file); $element = $dom->findOne('#css-selector'); // "$element" === instance of "SimpleHtmlDomInterface" $elements = $dom->findMulti('.css-selector'); // "$elements" === instance of SimpleHtmlDomNodeInterface<int, SimpleHtmlDomInterface> $elementOrFalse = $dom->findOneOrFalse('#css-selector'); // "$elementOrFalse" === instance of "SimpleHtmlDomInterface" or false $elementsOrFalse = $dom->findMultiOrFalse('.css-selector'); // "$elementsOrFalse" === instance of SimpleHtmlDomNodeInterface<int, SimpleHtmlDomInterface> or false ...从url中加载html文档从字符串中加载html文档从文件中加载html文档// 新建一个Dom实例 $html = new simple_html_dom(); // 从url中加载 $html->load_file('http://www.alingfeng.cn'); // 从字符串中加载 $html->load('<html><body>从字符串中加载html文档演示</body></html>'); //从文件中加载 $html->load_file('path/file/test.html'); //创建HTML文档 // Create a DOM object from a string $html = str_get_html('<html><body>Hello!</body></html>'); // Create a DOM object from a URL $html = file_get_html('http://www.google.com/'); // Create a DOM object from a HTML file $html = file_get_html('test.htm'); 查找html元素可以使用find函数来查找html文档中的元素。返回的结果是一个包含了对象的数组。我们使用HTML DOM解析类中的函数来访问这些对象,下面给出几个示例://查找html文档中的超链接元素 $a = $html->find('a'); //查找文档中第(N)个超链接,如果没有找到则返回空数组. $a = $html->find('a', 0); // 查找id为main的div元素 $main = $html->find('div[id=main]',0); // 查找所有包含有id属性的div元素 $divs = $html->find('div[id]'); // 查找所有包含有id属性的元素 $divs = $html->find('[id]'); // 查找id='#container'的元素 $ret = $html->find('#container'); // 找到所有class=foo的元素 $ret = $html->find('.foo'); // 查找多个html标签 $ret = $html->find('a, img'); // 还可以这样用 $ret = $html->find('a[title], img[title]'); // 查找 ul列表中所有的li项 $ret = $html->find('ul li'); //查找 ul 列表指定class=selected的li项 $ret = $html->find('ul li.selected'); // 返回父元素 $e->parent; // 返回子元素数组 $e->children; // 通过索引号返回指定子元素 $e->children(0); // 返回第一个资源速 $e->first_child (); // 返回最后一个子元素 $e->last _child (); // 返回上一个相邻元素 $e->prev_sibling (); //返回下一个相邻元素 $e->next_sibling ();元素属性操作使用简单的正则表达式来操作属性选择器。[attribute] – 选择包含某属性的html元素[attribute=value] – 选择所有指定值属性的html元素[attribute!=value]- 选择所有非指定值属性的html元素[attribute^=value] -选择所有指定值开头属性的html元素[attribute$=value] 选择所有指定值结尾属性的html元素[attribute*=value] -选择所有包含指定值属性的html元素// 本例中将$a的锚链接值赋给$link变量 $link = $a->href; $link = $html->find('a',0)->href;每个对象都有4个基本对象属性:tag – 返回html标签名innertext – 返回innerHTMLoutertext – 返回outerHTMLplaintext – 返回html标签中的文本//给$a的锚链接赋新值 $a->href = 'http://www.jb51.net'; // 删除锚链接 $a->href = null; // 检测是否存在锚链接 if(isset($a->href)) { //代码 }解析器中没有专门的方法来添加、删除元素,不过可以变通一下使用:// 封装元素 $e->outertext = '<div class="wrap">' . $e->outertext . '<div>'; // 删除元素 $e->outertext = ''; // 添加元素 $e->outertext = $e->outertext . '<div>foo<div>'; // 插入元素 $e->outertext = '<div>foo<div>' . $e->outertext; $doc = $html; // 输出 echo $doc; //如何避免解析器消耗过多内存 $html->clear();简单示例:$html = file_get_html('http://www.alingfeng.cn/');//获取html $dom = new simple_html_dom(); //new simple_html_dom对象 $dom->load($html) //加载html // Find all images foreach($dom->find('img') as $element) { //获取img标签数组 echo $element->src . '<br>'; //获取每个img标签中的src } // Find all links foreach($dom->find('a') as $element){ //获取a标签的数组 echo $element->href . '<br>';//获取每个a标签中的href } $html = file_get_html('http://slashdot.org/'); //获取html $dom = new simple_html_dom(); //new simple_html_dom对象 $dom->load($html); //加载html // Find all article blocks foreach($dom->find('div.article') as $article) { $item['title'] = $article->find('div.title', 0)->plaintext; //plaintext 获取纯文本 $item['intro'] = $article->find('div.intro', 0)->plaintext; $item['details'] = $article->find('div.details', 0)->plaintext; $articles[] = $item; } print_r($articles); // Create DOM from string $html = str_get_html('<div id="hello">Hello</div><div id="world">World</div>'); $dom = new simple_html_dom(); //new simple_html_dom对象</p><p> $dom->load($html); //加载html $dom->find('div', 1)->class = 'bar'; //class = 赋值 给第二个div的class赋值</p><p> $dom->find('div[id=hello]', 0)->innertext = 'foo'; //innertext内部文本</p><p> echo $dom;find示例:find ( string $selector [, int $index] ) // Find all anchors, returns a array of element objects a标签数组 $ret = $html->find('a');</p><p> // Find (N)th anchor, returns element object or null if not found (zero based)第一个a标签 $ret = $html->find('a', 0);</p><p> // Find lastest anchor, returns element object or null if not found (zero based)最后一个a标签 $ret = $html->find('a', -1); </p><p> // Find all <div> with the id attribute $ret = $html->find('div[id]');</p><p> // Find all <div> which attribute id=foo $ret = $html->find('div[id=foo]'); </p><p> // Find all element which id=foo $ret = $html->find('#foo');</p><p> // Find all element which class=foo $ret = $html->find('.foo');</p><p> // Find all element has attribute id $ret = $html->find('*[id]'); </p><p> // Find all anchors and images a标签与img标签数组 $ret = $html->find('a, img'); </p><p> // Find all anchors and images with the "title" attribute $ret = $html->find('a[title], img[title]');</p><p> // Find all <li> in <ul> $es = $html->find('ul li'); ul标签下的li标签数组</p><p> // Find Nested <div> tags $es = $html->find('div div div'); div标签下div标签下div标签数组</p><p> // Find all <td> in <table> which class=hello $es = $html->find('table.hello td'); table标签下td标签数组</p><p> // Find all td tags with attribite align=center in table tags $es = $html->find(''table td[align=center]'); </p><p> //5.Element //的方法 $e = $html->find("div", 0); //$e 所拥有的方法如下表所示 //Attribute Name Usage $e->tag //标签 $e->outertext //外文本 $e->innertext //内文本 $e->plaintext //纯文本 </p><p> </p><p> // Example $html = str_get_html("<div>foo <b>bar</b></div>"); echo $e->tag; // Returns: " div" echo $e->outertext; // Returns: " <div>foo <b>bar</b></div>" echo $e->innertext; // Returns: " foo <b>bar</b>" echo $e->plaintext; // Returns: " foo bar"</p><p> /6.DOM traversing 方法 //Method Description mixed$e->children ( [int $index] ) //子元素 element$e->parent () //父元素 element$e->first_child () //第一个子元素 element$e->last_child () //最后一个子元素 element$e->next_sibling () //后一个兄弟元素 element$e->prev_sibling () //前一个兄弟元素 </p><p> // Example echo $html->find("#div1", 0)->children(1)->children(1)->children(2)->id; // or echo $html->getElementById("div1")->childNodes(1)->childNodes(1)->childNodes(2)->getAttribute('id');参考链接: https://github.com/voku/simple_html_dom https://blog.csdn.net/qq_36025814/article/details/89500333
查看详情点赞评论1收藏浏览1282023-07-11 11:50:15Stable diffusion本地部署初体验
博主最近也在跟风,在网上找一些AI绘图的工具,国外国内基本都了解了一下,工具很多热门的不多,DALL·E,Midjourney,Stable Diffusion,文心一格,通义万象等。映象最深的应该还是这两个,Midjourney,Stable Diffusion,论画质,普遍Midjourney都要高一些,更加逼真,Stable Diffusion更偏向艺术和创作,当然真正的高手创作出来的图也有比Midjourney更震撼,上限很高,不喜勿喷只是个人感觉,毕竟我不是专业的。作为一个白嫖党,外加喜欢研究的我来说,Stable Diffusion才是香。网上看了一些资料,也有很多教程,然后我跟着网上的工具本地搭了一个(教程有很多),用了一些简单的模型和描述生成了一些图,总体来说,很不错,如果是设计专业的来弄,画图面应该更加好看,网上也有各种已经训练好的模型供大家使用,有兴趣的朋友可以尝试一下,主要是免费,随便造,原创。下面就分享一下网友和我生成的图,图片来自互联网和我生成的,如有涉及侵权请及时告知我删除。
查看详情点赞1评论收藏1浏览2152023-07-08 09:58:05shell 创建conf文件,并写入内容(shell创建nginx vhost配置文件)
点赞评论收藏浏览722023-06-30 14:56:24沉浸式翻译 --一键开启双语阅读,提升信息获取效率
随着谷歌翻译退出中国市场,市场上迫切需要一款能够替代谷歌翻译的工具。在这个背景下,沉浸式翻译应运而生,成为一款备受关注的翻译工具。 沉浸式翻译是一款浏览器插件,官方网址为: https://immersivetranslate.com/ ,它可以智能识别网页主内容区进行双语翻译,插件支持全平台浏览器,PDF文件翻译,EPUB电子书双语翻译、制作、导出,字幕文件翻译等功能。 沉浸式翻译是一款全面支持80多种语言翻译的工具。以下是该工具的主要特点和功能解释: 1. 多语言支持:沉浸式翻译可以翻译80多种语言,让您轻松应对各种语言交流需求。 2. 自定义翻译服务:您可以自由选择多种翻译服务,以满足个性化的翻译偏好。 3. 翻译设置定制:您可以自定义哪些语种需要翻译,哪些语种不需要翻译,甚至可以设定特定网址的翻译与否。 4. 双语对照显示:沉浸式翻译的界面同时显示原语言和翻译后的语言,方便您进行一一对照,确保准确性。 5. 多样化译文样式:您可以根据个人喜好设置多种译文样式,包括字体、颜色等,以使翻译结果更加符合您的偏好。 6. 配置导入导出:支持导入和导出配置,方便您在不同设备间进行设置同步或备份。 7. 免费使用:最重要的是,沉浸式翻译是免费使用的,为您提供便捷的翻译服务,无需支付任何费用。 推荐使用!
查看详情点赞13评论1收藏1浏览2362023-06-30 09:59:22shell脚本读取PHP文件数组的值,放到shell变量中使用方法
今天在用shell执行PHP文件,需要读取PHP数组中的一些值的时候。遇到了问题,找了很多资料,最后问了AI。经常一翻和AI的纠缠。终于给了我正确的答案,整理如下。事实证明AI真强大。PHP文件中的数组:web_data.php<?php $web_data = [ "port"=>"10764", "secret"=>"LU2DuzNpi94Ff8jastAscGvv2HbGK2UJ", "mainDoain"=>"lxl.petuu.shop", "domain"=>"", 'mysqlUser' => "userName", 'mysqlPassword' => "gehrht1646", ]; return $web_data;shell脚本中写法:projectName=$(php -r 'include "web_data.php"; echo $web_data["mainDoain"];') echo $projectName搞定
查看详情点赞2评论收藏浏览1222023-06-29 16:24:24