我试图解析是由由两种分离的key = value对的URL编码的字符串&
或&
.
以下内容仅匹配第一次出现,将键和值分解为单独的结果元素:
var result = mystring.match(/(?:&|&)?([^=]+)=([^&]+)/)
Run Code Online (Sandbox Code Playgroud)
字符串'1111342 = Adam%20Franco&348572 = Bob%20Jones'的结果将是:
['1111342', 'Adam%20Franco']
Run Code Online (Sandbox Code Playgroud)
使用全局标志'g'将匹配所有匹配项,但仅返回完全匹配的子字符串,而不是分离的键和值:
var result = mystring.match(/(?:&|&)?([^=]+)=([^&]+)/g)
Run Code Online (Sandbox Code Playgroud)
字符串'1111342 = Adam%20Franco&348572 = Bob%20Jones'的结果将是:
['1111342=Adam%20Franco', '&348572=Bob%20Jones']
Run Code Online (Sandbox Code Playgroud)
虽然我可以&
单独拆分字符串并分别拆分每个键/值对,但有没有办法使用JavaScript的正则表达式支持来匹配模式的多次出现,/(?:&|&)?([^=]+)=([^&]+)/
类似于PHP的preg_match_all()
函数?
我的目标是通过某种方式获得结果,子匹配分开如下:
[['1111342', '348572'], ['Adam%20Franco', 'Bob%20Jones']]
Run Code Online (Sandbox Code Playgroud)
要么
[['1111342', 'Adam%20Franco'], ['348572', 'Bob%20Jones']]
Run Code Online (Sandbox Code Playgroud) 我有一个基于快速启动设置的Zend Framework应用程序.
我已经让演示工作了,现在我正在实例化一个新的模型类来做一些真正的工作.在我的控制器中,我想将配置参数(在application.ini中指定)传递给我的模型构造函数,如下所示:
class My_UserController extends Zend_Controller_Action
{
public function indexAction()
{
$options = $this->getFrontController()->getParam('bootstrap')->getApplication()->getOptions();
$manager = new My_Model_Manager($options['my']);
$this->view->items = $manager->getItems();
}
}
Run Code Online (Sandbox Code Playgroud)
上面的例子允许访问选项,但似乎非常圆.有更好的方法来访问配置吗?
我需要测试返回的值,ini_get('memory_limit')
如果它低于某个阈值,则增加内存限制,但是这个ini_get('memory_limit')
调用返回字符串值,如'128M'而不是整数.
我知道我可以编写一个函数来解析这些字符串(将案例和尾随'B'考虑在内),因为我已多次编写它们:
function int_from_bytestring ($byteString) {
preg_match('/^\s*([0-9.]+)\s*([KMGTPE])B?\s*$/i', $byteString, $matches);
$num = (float)$matches[1];
switch (strtoupper($matches[2])) {
case 'E':
$num = $num * 1024;
case 'P':
$num = $num * 1024;
case 'T':
$num = $num * 1024;
case 'G':
$num = $num * 1024;
case 'M':
$num = $num * 1024;
case 'K':
$num = $num * 1024;
}
return intval($num);
}
Run Code Online (Sandbox Code Playgroud)
然而,这变得乏味,这似乎是PHP中已经存在的随机事物之一,尽管我从来没有找到它.有谁知道解析这些字节数量字符串的一些内置方法?
默认情况下,即使会话中没有数据,PHP的会话处理机制也会设置会话cookie标头并存储会话.如果会话中没有设置数据,那么我不希望Set-Cookie
在响应中发送到客户端的标头,我不希望在服务器上存储空的会话记录.如果添加了数据$_SESSION
,则应继续正常行为.
我的目标是实现Drupal 7和Pressflow排序的延迟会话创建行为,其中没有存储会话(或发送会话cookie标头),除非$_SESSION
在应用程序执行期间将数据添加到数组.这种行为的关键是允许反向代理(如Varnish)缓存并提供匿名流量,同时让经过身份验证的请求传递给Apache/PHP.Varnish(或其他代理服务器)配置为在没有cookie的情况下传递任何请求,假设正确存在cookie,则请求是针对特定客户端的.
我已经从Pressflow移植了会话处理代码,该代码使用session_set_save_handler()
并覆盖了在保存之前session_write()
检查$_SESSION
数组中数据的实现,并将其写为库并在此处添加答案,如果这是最佳/唯一的路由.
我的问题:虽然我可以实现一个完全自定义的session_set_save_handler()
系统,但是有一种更简单的方法来以相对通用的方式获得这种延迟会话创建行为,这对大多数应用程序是透明的吗?
我正在尝试编写一个读取管道数据的perl脚本,然后根据该数据提示用户输入.prompt_for_action
我正在尝试执行以下脚本:
#!/usr/bin/perl
my @hosts = ();
while (<>) {
my $host = $_;
$host =~ s/\n//; # strip newlines
push(@hosts, $host);
}
for my $host (@hosts) {
print "Do you want to do x with $host ? y/n: ";
chomp(my $answer = <>);
print "You said `$answer`.\n";
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,没有等待用户输入,它只是吹过而没有等待我输入:
$ echo "test1.example.com
> test2.example.com" | ./prompt_for_action
Do you want to do x with test1.example.com ? y/n: You said ``.
Do you want to do x with test2.example.com ? …
Run Code Online (Sandbox Code Playgroud) 我通过LDAP(来自Java和PHP)查询Active Directory,以构建用户所属的所有组的列表.此列表必须包含所有包含用户直接成员的组的所有组(组织单位可选).例如:
User1是GroupA,GroupB和GroupC的成员.
GroupA是GroupD的成员.
我正在寻找一种方法来构建一个LDAP查询,它将立即返回GroupA ,GroupB ,GroupC 和 GroupD.
我目前的实现如下,但我正在寻找一种更有效的方法来收集这些信息.
当前朴素实现(伪代码)
user = ldap_search('samaccountname=johndoe', baseDN);
allGroups = array();
foreach (user.getAttribute('memberOf') as groupDN) {
allGroups.push(groupDN);
allGroups = allGroups.merge(getAncestorGroups(groupDN));
}
function getAncestorGroups(groupDN) {
allGroups = array();
group = ldap_lookup(groupDN);
parents = group.getAttribute('memberOf');
foreach (parents as groupDN) {
allGroups.push(groupDN);
allGroups = allGroups.merge(getAncestorGroups(groupDN));
}
return allGroups;
}
Run Code Online (Sandbox Code Playgroud) 我经常想要为表添加一个值,或者如果它的键已经存在则更新该值.这可以通过多种方式实现,假设在示例中的'user_id'和'pref_key'列上设置了主键或唯一键:
1.盲插,如果收到重复键错误则更新:
// Try to insert as a new value
INSERT INTO my_prefs
(user_id, pref_key, pref_value)
VALUES (1234, 'show_help', 'true');
// If a duplicate-key error occurs run an update query
UPDATE my_prefs
SET pref_value = 'true'
WHERE user_id=1234 AND pref_key='show_help';
Run Code Online (Sandbox Code Playgroud)
2.检查是否存在,然后选择或更新:
// Check for existence
SELECT COUNT(*)
FROM my_prefs
WHERE user_id=1234 AND pref_key='show_help';
// If count is zero, insert
INSERT INTO my_prefs
(user_id, pref_key, pref_value)
VALUES (1234, 'show_help', 'true');
// If count is one, update
UPDATE my_prefs
SET pref_value = …
Run Code Online (Sandbox Code Playgroud) 下面是一个示例类层次结构和代码.我正在寻找一种方法来确定'ChildClass1'或'ChildClass2'是否具有静态方法whoAmI()在其上调用它而不在每个子类中重新实现它.
<?php
abstract class ParentClass {
public static function whoAmI () {
// NOT correct, always gives 'ParentClass'
$class = __CLASS__;
// NOT correct, always gives 'ParentClass'.
// Also very round-about and likely slow.
$trace = debug_backtrace();
$class = $trace[0]['class'];
return $class;
}
}
class ChildClass1 extends ParentClass {
}
class ChildClass2 extends ParentClass {
}
// Shows 'ParentClass'
// Want to show 'ChildClass1'
print ChildClass1::whoAmI();
print "\n";
// Shows 'ParentClass'
// Want to show 'ChildClass2'
print ChildClass2::whoAmI();
print "\n";
Run Code Online (Sandbox Code Playgroud)