当前位置: 首页 > news >正文

php url别名,编写PHP程序实现Drupal中pathauto模块的批量生成URL别名(Alias)

为了网站SEO的需要,我在Drupal中安装了第三方模块pathauto,用于在页面生成时自动产生一个带有关键词的URL别名。不过前一阵子导入数据的时候,pathauto的事先设置没有做好,必须在设置好了以后将前面不符合规范的别名都删除,然后重新生成。

在菜单中有批量生成Alias的功能,但默认是每次生成50个,可以修改为几百,再多了就会超时报错,而且当需要重新生成的数量到10万的时候,需要在Web页面上操作数百次以上,很不现实,只有设法编个程序来做了。

好在Drupal的用户数量很大,被数十万个网站采用,所以各种英文资料比较齐全,讨论留言中也可以找到很多有用信息。于是我搞了下面这个小程序来实现批量生成:

include_once './includes/bootstrap.inc';

include_once './sites/all/modules/pathauto/pathauto.inc';

include_once './sites/all/modules/pathauto/pathauto_node.inc';

// The URL how you would normaly access your drupal site with a browser

$province="shanghai";

$once=100;

$times=1000;

$url = "http://$province.youbianku.com";

$drupal_base_url = parse_url($url);

$_SERVER['HTTP_HOST'] = $drupal_base_url['host'];

$_SERVER['PHP_SELF'] = $drupal_base_url['path'].'/index.php';

$_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'] = $_SERVER['PHP_SELF'];

$_SERVER['REMOTE_ADDR'] = NULL;

$_SERVER['REQUEST_METHOD'] = NULL;

drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

variable_set('pathauto_max_bulk_update', $once);

for ($i=1;$i<=$times;$i++)

{

$start=time();

echo "$province: $i/$times*$once";

_pathauto_include();

$count=node_pathauto_bulkupdate();

if ($count==0) {exit('0 alias, Done!\n');}

$stop=time();

$pass=$stop-$start;

echo "; count=$count aliases; time=$pass seconds;\n";

}

echo "Done!\n";

?>

上面是以上海为例,每次生成100个,最多运行1000次。实际使用中每次都需要10-20秒,所以整个耗时还是很长的,如果中途遇到数据库负载过高而连接中断,可以重新继续运行。

相关文章:

  • Spark记录-spark与storm比对与选型(转载)
  • matlab 实验七,matlab 实验七 数字填图问题
  • matlab corrcoef 原理,cov函数 corrcoef函数【Matlab】
  • 彻底解决Oracle unable to create INITIAL extent for segment in tablespace xx
  • php控制台运维工具,试用Grafana:一个自动化运维常用的可视化开源工具
  • C语言博客作业--函数
  • php静态的关键字是,php 延迟静态绑定static关键字
  • hdu 5685 Problem A (逆元)
  • 浏览器运行不出来PHP,php脚本无法运行碎片浏览器
  • oracle创建永久账号,Oracle:用户创建、权限分配(默认账号)
  • Codeforces Round #369 (Div. 2)
  • oracle的下载地址,ORACLE 资源包下载地址
  • Ubuntu 16.04 安装NodeJs
  • oracle 集中度函数,提高品牌集中度为企业谋取更多利益
  • TreeMap按照key排序
  • 【RocksDB】TransactionDB源码分析
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • Apache的80端口被占用以及访问时报错403
  • css属性的继承、初识值、计算值、当前值、应用值
  • docker-consul
  • Laravel 实践之路: 数据库迁移与数据填充
  • laravel 用artisan创建自己的模板
  • MySQL主从复制读写分离及奇怪的问题
  • passportjs 源码分析
  • PHP那些事儿
  • RxJS: 简单入门
  • springboot_database项目介绍
  • vue.js框架原理浅析
  • Yii源码解读-服务定位器(Service Locator)
  • 第十八天-企业应用架构模式-基本模式
  • 关于springcloud Gateway中的限流
  • 前端工程化(Gulp、Webpack)-webpack
  • 入门级的git使用指北
  • 通信类
  • 我的zsh配置, 2019最新方案
  • 鱼骨图 - 如何绘制?
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • (30)数组元素和与数字和的绝对差
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (k8s中)docker netty OOM问题记录
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (分类)KNN算法- 参数调优
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (未解决)macOS matplotlib 中文是方框
  • (转载)虚函数剖析
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .net6Api后台+uniapp导出Excel
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .net与java建立WebService再互相调用
  • .net专家(高海东的专栏)
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)