小编Str*_*rae的帖子

重新设计网站后重复301重定向(SEO)

我们最近更新了我们的网站; 旧的有大约300页......新的大约有80页;)

这是因为在旧结构中,对于每个参数,我们都有很多页面.相反,现在我们只有一个页面带有"摘要".

例如,关于'car'参数的旧结构是:

  1. 主页,'汽车'
  2. 子页面,'轮胎'
  3. 子页面,'引擎'
  4. 子页面,'配件'
  5. 等等...

现在,我们只有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?

.htaccess seo http-status-code-404 http-status-code-301

5
推荐指数
1
解决办法
4188
查看次数

preg_match在输入satinization中是否安全?

我正在构建一个新的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,因此需要一个跨数据库的验证方法;)

php validation sanitization input-sanitization

5
推荐指数
2
解决办法
6001
查看次数

Python 子进程、mysqldump 和管道

我在尝试构建简单的备份/升级数据库脚本时遇到问题。

错误出现在使用子进程的 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 > …

python mysql subprocess

5
推荐指数
2
解决办法
1万
查看次数

数据库速度优化:很少的表有很多行,或者很多表有很少的行?

我有一个很大的疑问.

让我们以一个公司订单的数据库为例.

假设这家公司每月大约生产2000个订单,那么,每年大约24K订单,他们不想删除任何订单,即使它是5年(嘿,这是一个例子,数字并不意味着任何东西).

在具有良好的数据库查询速度的意义上,它最好只有一个表,或者每年有一个更快?

我的想法是每年为订单创建一个新表,称为orders_2008,orders_2009等.

加速数据库查询可能是一个好主意吗?

通常使用的数据是当前年份的数据,因此行数越少越好.显然,当我同时搜索所有订单表时,这会产生问题,因为我是否应该运行一些复杂的UNION ..但这种情况在正常活动中非常罕见.

我认为最好有一个应用程序,95%的查询是快速的,剩下的有点慢,而不是一个总是很慢的应用程序.

我的实际数据库是130个表,我的应用程序的新版本应该有大约200-220个表...其中约40%将每年复制.

有什么建议吗?

编辑:RDBMS可能是Postgresql,也许(希望不是)Mysql

postgresql performance database-design

4
推荐指数
2
解决办法
2706
查看次数

PHP/PostgreSQL:检查准备好的语句是否已经存在

我创建我准备好的声明:

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)

php postgresql prepared-statement

4
推荐指数
1
解决办法
6825
查看次数

如何向老板解释代码/资源优化是否重要?

啊,每次都是如此令人沮丧..

我们的托管公司有一个专用的服务器,每当我必须写下一个新的应用程序(或添加到一个预先存在的应用程序)时,我会"失去"一段时间来优化许多行为的代码(减少db查询,优化数据库结构,减少带宽等.)取决于应用程序应该做什么.

显然,关键不在于我编写错误的代码然后重建它,只是在项目完成之后,我总是找到可以做得更好的事情.

每次,如果我的老板抓住我这样做,他会说'你在浪费你的时间!如果应用程序需要更多资源,我们会购买更多RAM,更多CPU或更多带宽!'.

什么是最好(也是最简单)的方式来解释他,优化仍然很重要,而且不是那么容易或自动升级(生产!)服务器的硬件?

编辑:我不是只谈论数据库优化,而是谈论应用程序的每个方面

optimization performance

4
推荐指数
3
解决办法
700
查看次数

数据库设计:分层结构的最佳实践

我会尝试尽可能清楚地揭露;)

好吧,我需要存储一些可以链接到自己的数据作为父>子关系,没有限制深度.

我的第一次尝试是:

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)

postgresql database-design data-structures

4
推荐指数
2
解决办法
2395
查看次数

jQuery ajax"太多的递归"

我有一个连续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调用被设置为同步..为什么?

javascript ajax recursion jquery loops

4
推荐指数
1
解决办法
5069
查看次数

哪里可以找到双元PHP语法的参考?

我希望这里的每个人都知道php'变量'语法:

$color = 'red';
$red = 'yes, im red';
echo $$color;
//output: 'yes, im red';
Run Code Online (Sandbox Code Playgroud)

但我的问题是:这个语法是如何命名的?我试图在php.net上找到引用,没有结果(我想知道这个功能是否会保存在php6中,其他属性等等......)

php syntax

3
推荐指数
2
解决办法
2159
查看次数

使用动态字段的数据库设计:单个表与多个表 - 许多索引

我必须选择将使用动态字段存储内容类型(例如,博客文章,页面,文档,发票,估计等等)的数据库的结构:例如,Estimate内容类型应具有字段title,datetotal 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)

database-design design-patterns database-schema

3
推荐指数
1
解决办法
1万
查看次数