小编Mar*_*k B的帖子

如何在等待长时间运行的MySQL查询时优雅地使PHP脚本超时?

我有一个运行了大量数据库查询的PHP站点.使用某些参数组合,这些查询可能会长时间运行,从而触发丑陋的超时消息.我想用一个很好的超时消息替换它,根据我的网站风格的其余部分主题.

预见到这类问题的常见答案:

  1. "优化您的查询,以便它们不会运行这么长时间" - 我正在记录长时间运行的查询并对其进行优化,但我只是在用户受到影响后才知道这些查询.

  2. "增加PHP超时设置(例如set_time_limit,max_execution_time),以便长时间运行的查询可以完成" - 有时查询可以运行几分钟.我想告诉用户之前有问题(例如30秒后).

  3. "使用register_tick_function来监视脚本运行的时间" - 这只在我的脚本中的代码行之间执行.当脚本等待数据库的响应时,不会调用tick函数.

如果它有帮助,该站点使用Drupal(具有大量自定义)构建,并且在PHP 5.2上使用MySQL 5在虚拟专用Linux服务器上运行.

php mysql timeout drupal

10
推荐指数
1
解决办法
3191
查看次数

如何在jqGrid选择工具栏过滤器中添加"全选"选项?

我正在使用带有过滤器工具栏的jqGrid构建表,以允许用户过滤表中显示的行.如果我使用文本作为搜索类型,这一切都很好用,但对于某些列,我想使用选择列表,以便用户更容易根据列中的值进行过滤.

我可以将列stype设置为"select",并使用我的表中的值填充选项,一切都很好.但是,如果我添加另一个值为"all"的选项(以便用户可以显示该列中包含任何值的行),它将在选择列表中显示为"未定义".

示例列的colModel定义是

  {name:'keyword',
    index:'keyword',
    width:150, 
    align:'left',
    stype:'select',
    sortable:true,
    searchoptions: { value: '"",All;keyword 1,keyword 1;keyword 2,keyword 2' } },
Run Code Online (Sandbox Code Playgroud)

作为另一个例子,我有另一个显示true或false的列.为了让我的桌子看起来不错,我正在显示漂亮的绿色刻度图像或红色十字图像.我希望选择框包含"全部","是"或"否".但是,由于表中没有任何行具有这些值,因此选择列表包含三次"未定义".

有什么方法可以强制选择列表显示我的选择选项,即使它们不存在于表中?

jquery jqgrid

6
推荐指数
1
解决办法
5214
查看次数

单击以防止重复提交时,如何禁用Drupal表单提交按钮?

听起来像一个简单的问题。我添加了一些jQuery魔术:

$("#edit-save").click(function(event) {
  $(this).attr("disabled", "true");
});
Run Code Online (Sandbox Code Playgroud)

但是,一旦到位,就不会调用我的表单提交处理程序。

这是我在hook_menu中定义的路径上的自定义表单:

$items['my_form'] = array(
  'title' => 'My form',
  'page callback' => 'drupal_get_form',
  'page arguments' => array('mymod_myform'),
  'type' => MENU_CALLBACK,
);
Run Code Online (Sandbox Code Playgroud)

在表单中,我有一个提交按钮和一个取消按钮:

$form['cancel'] = array(
  '#type' => 'submit',
  '#value' => t('Cancel'),
);

$form['save'] = array(
  '#type' => 'submit',
  '#value' => t('Save'),
);
Run Code Online (Sandbox Code Playgroud)

我定义了自己的提交处理程序:

$form['#submit'][] = 'mymod_myform_submit';
Run Code Online (Sandbox Code Playgroud)

我在drupal_get_form()函数中放置了一些跟踪代码,以在提交表单时嗅探$ _POST变量。禁用jQuery magic时,$ _POST变量包含一个“ op”参数:

Array
  (
    [op] = Save
    [form_build_id] => form-6e74c87390e3fc48d0bebd2f5193315b
    [form_token] => 33db6e34c0350e33c48861a63a38d45f
    [form_id] => dh_seo_workload_item_form
  )
Run Code Online (Sandbox Code Playgroud)

但是,如果我启用了jQuery Magic,可以在单击后禁用提交按钮,则$ _POST数组中将不再包含“ op”参数,因此Drupal认为该表单尚未提交。

我已经在jQuery避免了表单的双重提交 …

jquery drupal drupal-fapi

6
推荐指数
1
解决办法
7528
查看次数

PHP disk_total_space不会测量LVM分区大小

我有一个PHP脚本,需要检查磁盘的总大小.我已经成功使用disk_total_space一段时间了,刚刚转移到使用LVM的新服务器.disk_total_space现在报告完全不同的大小.我在第二台LVM服务器上重新创建了这个.

df -h 在第一台服务器上(CentOS 6.4,PHP v5.3.27)显示

Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/vg-vg_root    99G   47G   47G  50% /
tmpfs                     32G     0   32G   0% /dev/shm
/dev/sda1                194M   65M  120M  36% /boot
/dev/mapper/vg-vg_backup 400G   33M  400G   1% /var/tmp
/dev/mapper/vg-vg_mysql  950G   81G  870G   9% /data
Run Code Online (Sandbox Code Playgroud)

但disk_total_space('/ dev/mapper/vg-vg_mysql')返回32G.实际上,它返回32G我在命令中输入的任何分区.

在第二台服务器(Ubuntu 10.04.4LTS,PHP v5.3.6)上,我得到了同样的行为:

Filesystem              Size  Used Avail Use% Mounted on
/dev/mapper/batty-root  258G  217G   29G  89% /
none                    4.0G  208K  4.0G   1% /dev
none                    4.0G     0  4.0G   0% /dev/shm
none                    4.0G   88K  4.0G   1% /var/run
none …
Run Code Online (Sandbox Code Playgroud)

php lvm

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

如何将动态日期格式应用于 Elasticsearch 中的多种类型?

我试图让 Elasticsearch 将格式中的字符串识别yyyy-MM-dd HH:mm:ss为日期字段。我创建了一个动态日期格式并将其应用于默认映射。当我索引第一种类型的文档时,它工作得很好 - 数据采用这种格式的任何新字段都会初始化为日期字段。

当我尝试创建新类型的文档,但日期格式字段的名称与我的第一种类型中的名称相同时,问题就出现了。这些失败并出现格式错误的日期错误

下面是一组用于演示的 Kibana 命令示例:

DELETE /datetest

PUT /datetest

PUT /datetest/_mapping/_default_
{
  "dynamic_date_formats" : ["yyyy-MM-dd HH:mm:ss"]
}

PUT /datetest/doc/1
{
  "date" : "2015-01-01 12:00:00"
}

# This one works fine
PUT /datetest/otherdoc/1
{
  "otherdate" : "2015-01-01 12:00:00"
}

# This one does not
PUT /datetest/otherdoc/2
{
  "date" : "2015-01-01 12:00:00"
}
Run Code Online (Sandbox Code Playgroud)

最后一个命令给出了这个错误: "Invalid format: \"2015-01-01 12:00:00\" is malformed at \" 12:00:00\""

我知道不同类型中具有相同名称的字段必须具有相同的数据类型,但在本例中,我希望它们具有相同的数据类型 - 日期。我可以手动为每个新类型创建映射,但我希望它自动支持添加到源数据中的新类型。这似乎就是动态日期格式应该做的事情。我在这里做错了什么吗?

date-formatting elasticsearch elasticsearch-mapping

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

我可以在表单提交中设置带有目标参数的form_state重定向吗?

我已经建立了一个"快速链接"下拉选择框为我的基于Drupal的Web应用程序.该选择框被实现为标准Drupal的形式,出现在网站中的所有网页.当用户选择一个选项,并提交表单,我想将用户重定向到相应的页面,而是让他们回到原来的页面时,他们已经完成.

例如,用户是在节点/ 5,并且选择一个快速链接其中他们带到另一种形式.当他们完成此表单时,我希望将它们返回到node/5.

我已经在系统的其他部分使用drupal_get_destination将?destination = node/5 querystring参数附加到目标表单来实现这一点,这很好用.但是,在我的快速链接表单提交处理程序中,我设置了form_state ['redirect']来设置目标页面,如果我添加了?destination =参数,它会被URL编码,因此在我的目标时不会被选中表格已提交.

function dh_seo_quick_links_form_submit($form, &$form_state) {
  $form_state['redirect'] = $form['#link_targets'][$link].'?'.drupal_get_destination();
}
Run Code Online (Sandbox Code Playgroud)

我完全走错了路吗?这种重定向甚至可能吗?我可以直接使用$ _REQUEST变量做一些聪明的事吗?

drupal drupal-forms

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