我们最近更新了我们的网站; 旧的有大约300页......新的大约有80页;)
这是因为在旧结构中,对于每个参数,我们都有很多页面.相反,现在我们只有一个页面带有"摘要".
例如,关于'car'参数的旧结构是:
现在,我们只有1页'汽车',里面都有.
实际上,我将所有子页面重定向到主页面,使用.htaccess 301重定向:
Redirect 301 /cars-tires.php http://www.example.com/cars.php
Redirect 301 /cars-engines.php http://www.example.com/cars.php
Redirect 301 /cars-accessories.php http://www.example.com/cars.php
Run Code Online (Sandbox Code Playgroud)
所以我们有很多不同的(即使主题是相同的)页面指向一个页面.
你觉得这对seo有好处,还是会更好地重定向旧的主页面并给旧的子页面找不到404?
我正在构建一个新的Web应用程序,LAMP环境...我想知道preg_match是否可以信任用户的输入验证(当然+准备好的stmt)用于所有基于文本的字段(也就是不是HTML字段;电话,名称) ,姓氏等.).
例如,对于经典的"电子邮件字段",如果我检查输入如下:
$email_pattern = "/^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)" .
"|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}" .
"|[0-9]{1,3})(\]?)$/";
$email = $_POST['email'];
if(preg_match($email_pattern, $email)){
//go on, prepare stmt, execute, etc...
}else{
//email not valid! do nothing except warn the user
}
Run Code Online (Sandbox Code Playgroud)
我可以在SQL/XXS注入时轻松入睡吗?
我写的正则表达式更具限制性.
编辑:正如已经说过的,我确实使用了预处理语句,这种行为仅适用于基于文本的字段(如电话,电子邮件,姓名,姓氏等),因此不允许包含HTML(对于HTML字段) ,我使用HTMLpurifier).
实际上,我的任务是只有在匹配我的regexp-white-list时才传递输入值; 否则,将其返回给用户.
ps ::我正在寻找没有mysql_real_escape_strings的东西; 可能该项目将在未来切换到Postgresql,因此需要一个跨数据库的验证方法;)
我在尝试构建简单的备份/升级数据库脚本时遇到问题。
错误出现在使用子进程的 mysqldump 调用中:
cmdL = ["mysqldump", "--user=" + db_user, "--password=" + db_pass, domaindb + "|", "gzip", ">", databases_path + "/" + domaindb + ".sql.gz"]
print "%s: backup database %s \n\t[%s]" % (domain, domaindb, ' '.join(cmdL))
total_log.write("%s: backup database %s \n\t[%s] \n" % (domain, domaindb, ' '.join(cmdL)))
p = subprocess.Popen(cmdL, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
Run Code Online (Sandbox Code Playgroud)
在此之前,我将sys.stdout和重定向sys.stderr到文件,以便拥有一个日志系统。
在这些日志中,我发现错误:
[mysqldump --user=xxxxxx --password=yyyyyyyy 数据库名称 | gzip > /home/drush-backup/2010-08-30.15.37/db/database_name.sql] [错误]:mysqldump:找不到表:“|”
似乎该|字符被视为 mysqldump 参数,而不是管道。
查看python子进程文档,这是正常的,但是我如何获得我需要的东西(调用命令mysqldump --user=xxxxxx --password=yyyyyyyy database_name | gzip > …
我有一个很大的疑问.
让我们以一个公司订单的数据库为例.
假设这家公司每月大约生产2000个订单,那么,每年大约24K订单,他们不想删除任何订单,即使它是5年(嘿,这是一个例子,数字并不意味着任何东西).
在具有良好的数据库查询速度的意义上,它最好只有一个表,或者每年有一个表更快?
我的想法是每年为订单创建一个新表,称为orders_2008,orders_2009等.
加速数据库查询可能是一个好主意吗?
通常使用的数据是当前年份的数据,因此行数越少越好.显然,当我同时搜索所有订单表时,这会产生问题,因为我是否应该运行一些复杂的UNION ..但这种情况在正常活动中非常罕见.
我认为最好有一个应用程序,95%的查询是快速的,剩下的有点慢,而不是一个总是很慢的应用程序.
我的实际数据库是130个表,我的应用程序的新版本应该有大约200-220个表...其中约40%将每年复制.
有什么建议吗?
编辑:RDBMS可能是Postgresql,也许(希望不是)Mysql
我创建我准备好的声明:
pg_prepare('stm_name', 'SELECT ...');
Run Code Online (Sandbox Code Playgroud)
今天,当我两次声明一个具有相同名称的预准备语句时,我遇到了一个问题(错误地调用了两次函数):
Warning: pg_prepare() [function.pg-prepare]: Query failed: ERROR: prepared statement "insert_av" already exists in xxx on line 221
Run Code Online (Sandbox Code Playgroud)
那么,作为问题标题,有一种方法可以检查是否已经存在具有相同标签的prepare语句,以防万一,覆盖它?
我知道这个错误来自我的错误,将通过在我的代码开头简单地声明准备好的语句来解决,但我想知道是否有一个解决方案可以更好地控制它们.
编辑:
在Milen回答之后,非常简单地检查准备好的语句是否已经被使用,只需查询数据库中的表pg_prepared_statements:
try{
$qrParamExist = pg_query_params("SELECT name FROM pg_prepared_statements WHERE name = $1", array($prepared_statement_name));
if($qrParamExist){
if(pg_num_rows($qrParamExist) != 0){
echo 'parametized statement already created';
}else{
echo 'parametized statement not present';
}
}else{
throw new Exception('Unable to query the database.');
}
}catch(Exception $e){
echo $e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)
但是,我不认为这是一个很好的解决方案,因为我每次都要查询数据库.
好吧,通常准备好的语句在脚本的开头声明,然后重新使用,但是,我有一个很好的连接类,我不喜欢在我只使用其中3个时声明10个预处理语句.
所以,我想我将使用一个简单的PHP数组来跟踪我创建的语句,然后使用isset()函数检查它是否存在或需要创建:
try{
$prepare = pg_prepare('my_stmt_name', "SELECT ...");
if($prepare){ …Run Code Online (Sandbox Code Playgroud) 啊,每次都是如此令人沮丧..
我们的托管公司有一个专用的服务器,每当我必须写下一个新的应用程序(或添加到一个预先存在的应用程序)时,我会"失去"一段时间来优化许多行为的代码(减少db查询,优化数据库结构,减少带宽等.)取决于应用程序应该做什么.
显然,关键不在于我编写错误的代码然后重建它,只是在项目完成之后,我总是找到可以做得更好的事情.
每次,如果我的老板抓住我这样做,他会说'你在浪费你的时间!如果应用程序需要更多资源,我们会购买更多RAM,更多CPU或更多带宽!'.
什么是最好(也是最简单)的方式来解释他,优化仍然很重要,而且不是那么容易或自动升级(生产!)服务器的硬件?
编辑:我不是只谈论数据库优化,而是谈论应用程序的每个方面
我会尝试尽可能清楚地揭露;)
好吧,我需要存储一些可以链接到自己的数据作为父>子关系,没有限制深度.
我的第一次尝试是:
entry_id | parent_id | value
1 | NULL | Foo //foo is the grand parent
2 | 1 | Bar //bar is child of Foo
3 | 1 | Baz //baz too
4 | 2 | Bho //bho is child of Bar
5 | 4 | Som //som is child of Bho
6 | NULL | Git //another grand parent
7 | 6 | Tim //Git's child
Run Code Online (Sandbox Code Playgroud)
..等等.
这种结构的工作原理,但它是不可能的(或至少,我不能去throught)找到所有的富孩子的和"子孩子的"只有1查询.这需要一个循环.
我的目标是为SELECT查询优化一个结构,它可以一次性给我所有关系,例如:
SELECT "ALL SONS OF Bar"
Run Code Online (Sandbox Code Playgroud)
输出:
entry_id …Run Code Online (Sandbox Code Playgroud) 我有一个连续5个步骤的程序,在我的页面中,我为每个步骤调用ajax方法.
想法是运行第一个,如果一切都好,第二个,依此类推.
我的代码是:
$("#foo").click(function(){
$.ajax({
url: 'ajax.php',
async: false,
data: {
step: 1
},
dataType: 'json',
type: 'GET',
success: walk_through(data)
});
});
function walk_through(data)
{
if(data.status == 'ok')
{
if(data.next_step == 'end')
{
// All steps completed
}
else
{
// Current step completed, run next one
$.ajax({
url: 'ajax.php',
async: false,
data: {
step: data.next_step
},
dataType: 'json',
type: 'GET',
success: walk_through(data)
});
}
}
else
{
alert("Error.");
console.log(data);
}
}
Run Code Online (Sandbox Code Playgroud)
我得到"太多的递归"错误,即使我的ajax调用被设置为同步..为什么?
我希望这里的每个人都知道php'变量'语法:
$color = 'red';
$red = 'yes, im red';
echo $$color;
//output: 'yes, im red';
Run Code Online (Sandbox Code Playgroud)
但我的问题是:这个语法是如何命名的?我试图在php.net上找到引用,没有结果(我想知道这个功能是否会保存在php6中,其他属性等等......)
我必须选择将使用动态字段存储内容类型(例如,博客文章,页面,文档,发票,估计等等)的数据库的结构:例如,Estimate内容类型应具有字段title,date和total price.
然而,在这些田地可以添加矿石去除的时间,所以1年后,Estimate含有类型的notes田地可以有.
这是由着名的CMS(例如drupal)提供的常见任务,但我想知道什么是获得最佳性能和灵活性的最佳方法:例如Drupal用于拥有一个带有basic字段的表(例如title),并且所有辅助字段都是存储在动态创建的子表中,并使用外键链接到主表:
table node
| id | title | ...
| 1 | First example |
table fields_node_total_price
| id | node_id | value |
| 1 | 1 | 123.45 |
table fields_node_date
| id | node_id | value |
| 1 | 1 | 12345677 |
Run Code Online (Sandbox Code Playgroud)
等等..
我的观点是这种方法非常灵活,但很容易陷入性能问题:为了获取文档的所有字段,您必须多次连接表,并且代码本身必须多次迭代才能构建查询(但这不应该是一个问题).
顺便说一句多表是最常用的方法..因此必须有很多缺点.
我在考虑使用单个表会有什么样的不利之处:
| id | title | total_price | date | ec... …Run Code Online (Sandbox Code Playgroud) php ×3
postgresql ×3
performance ×2
.htaccess ×1
ajax ×1
javascript ×1
jquery ×1
loops ×1
mysql ×1
optimization ×1
python ×1
recursion ×1
sanitization ×1
seo ×1
subprocess ×1
syntax ×1
validation ×1