由于自PHP 5.3.0以来不推荐使用POSIX正则表达式(ereg),因此我想知道将旧表达式转换为PCRE(Perl兼容正则表达式)(preg)的简单方法.
每个例子,我有这个正则表达式:
eregi('^hello world');
Run Code Online (Sandbox Code Playgroud)
如何将表达式转换为preg_match
兼容表达式?
注意:此帖子用作与从ereg转换为preg相关的所有帖子的占位符,以及相关问题的重复选项.请不要关闭这个问题.
有关:
我有以下测试用例:
include_once('../Logger.php');
class LoggerTest extends PHPUnit_Framework_TestCase {
public function providerLogger() {
return new Logger;
}
/**
* @dataProvider providerLogger
*/
public function testAddStream($logger) {
$this->assertTrue(false);
}
}
Run Code Online (Sandbox Code Playgroud)
当我在PHPUnit中运行它时,我得到:
PHPUnit 3.4.14 by Sebastian Bergmann.
..........
Time: 0 seconds, Memory: 5.75Mb
OK (1 tests, 0 assertions)
Run Code Online (Sandbox Code Playgroud)
测试应该失败,但事实并非如此.我试过:
public function providerLogger() {
return array(new Logger);
}
Run Code Online (Sandbox Code Playgroud)
但我得到:
The data provider specified for LoggerTest::testAddStream is invalid.
Run Code Online (Sandbox Code Playgroud)
我试着宣布它static
(就像手册所说的那样),但仍然没有区别.
我记得以前以类似的方式工作,但我可能是错的.我错过了什么?
在此先感谢您的帮助.
PHP 5.3.3上的PHPUnit 3.4.14(取自PEAR)
如果malloc
分配失败,我们应该再试一次吗?
在这样的事情:
char* mystrdup(const char *s)
{
char *ab = NULL;
while(ab == NULL) {
ab=(char*)malloc(strlen(s)+1);
}
strcpy(ab, s);
return ab;
}
Run Code Online (Sandbox Code Playgroud)
while循环对检查内存分配有效吗?
我正在尝试将"大于"where语句转换为CI的Active Record语法.当我使用这个片段
$this->db->join('product_stocks', "product_stocks.size_id_fk = product_attributes.id", "left");
$this->db->where('product_stocks.stock_level', '> 1');
$result = $this->db->get('product_attributes')->result_array();
Run Code Online (Sandbox Code Playgroud)
然后打印$ this-> db-> last_query(); 显示WHERE
product_stocks .
stock_level = '> 1'
当然不正确.可以这样做吗?
我正在使用每个PHP的YouTube数据API,并以json格式请求来自特定用户的视频.json_decode之后的结果如下(缩短示例):
stdClass Object
(
[version] => 1.0
[encoding] => UTF-8
[feed] => stdClass Object
(
[xmlns] => http://www.w3.org/2005/Atom
[xmlns$media] => http://search.yahoo.com/mrss/
[xmlns$openSearch] => http://a9.com/-/spec/opensearchrss/1.0/
[xmlns$gd] => http://schemas.google.com/g/2005
[xmlns$yt] => http://gdata.youtube.com/schemas/2007
)
)
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何使用PHP访问节点"xmlns $ media"?在美元符号内它不起作用或者有没有我没有得到的方法?
在Windows上我可以打电话:
_time32(__time32_t); // to get 32bit time_t
_time64(__time64_t); // to get 64bit time_t
Run Code Online (Sandbox Code Playgroud)
(32位和64位程序)
在Linux中有没有办法做到这一点(用GCC编译)?
我们一直在使用来自网站的信息一段时间(如果您提及源代码我们这样做,该网站允许的内容)我们一直在手动复制信息.你可以想象这可能会很快变得乏味,所以我一直试图通过PHP脚本获取信息来自动化这个过程.
我正在尝试获取的URL是:
http://mediaforest.ro/weeklycharts/viewchart.aspx?r=WeeklyChartRadioLocal&y=2010&w=46 08-11-10 14-11-10
Run Code Online (Sandbox Code Playgroud)
如果我在浏览器中输入它,它会起作用,如果我尝试使用file_get_contents(),我会收到错误的请求
我想他们检查了客户端是否是浏览器,所以我推出了基于CURL的解决方案:
$ch = curl_init();
$header=array(
'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12',
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language: en-us,en;q=0.5',
'Accept-Encoding: gzip,deflate',
'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7',
'Keep-Alive: 115',
'Connection: keep-alive',
);
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_COOKIEFILE,'cookies.txt');
curl_setopt($ch,CURLOPT_COOKIEJAR,'cookies.txt');
curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
$result=curl_exec($ch);
curl_close($ch);
Run Code Online (Sandbox Code Playgroud)
我已经检查过,标题与我的浏览器标题完全相同,我仍然收到错误请求
所以我试了另一个解决方案
http://www.php.net/manual/en/function.curl-setopt.php#78046
Run Code Online (Sandbox Code Playgroud)
不幸的是,这也不起作用,我没有想法.我错过了什么?
我已经要求系统管理员在服务器上安装mcrypt,他们说一切正常.但是当我运行我的简单脚本时,我得到了这个.
警告:mcrypt_get_iv_size()[function.mcrypt-get-iv-size]:模块初始化失败
它来自这条线:
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256,MCRYPT_MODE_ECB);
Run Code Online (Sandbox Code Playgroud)
现在,从这段代码:
$algorithms = mcrypt_list_algorithms("/usr/local/bin/mcrypt");
foreach ($algorithms as $cipher) {
echo "$cipher<br />\n";
}
Run Code Online (Sandbox Code Playgroud)
我明白了:
警告:mcrypt_list_algorithms()[function.mcrypt-list-algorithms]:在模块目录中找不到算法
当我运行这个:
$modes = mcrypt_list_modes("/usr/local/bin/mcrypt");
foreach ($modes as $mode) {
echo "$mode <br />\n";
}
Run Code Online (Sandbox Code Playgroud)
我明白了:
警告:mcrypt_list_modes()[function.mcrypt-list-modes]:在模块目录中找不到模式
但是,运行此命令时此命令
which mcrypt; mcrypt -v
Run Code Online (Sandbox Code Playgroud)
生产:
/usr/local/bin/mcrypt
Mcrypt v.0.9.9 (x86_64-unknown-linux-gnu)
Linked against libmcrypt v.2.5.7
Copyright (C) 1998-2002 Nikos Mavroyanopoulos (nmav@gnutls.org)
Run Code Online (Sandbox Code Playgroud)
是否已正确安装/配置mcrypt?
更新:
我这样做了:
whereis libmcrypt
Run Code Online (Sandbox Code Playgroud)
......得到了结果:
libmcrypt: /usr/local/lib/libmcrypt /usr/local/lib/libmcrypt.so /usr/local/lib/libmcrypt.la
Run Code Online (Sandbox Code Playgroud)
我也改变了:
$modes = mcrypt_list_modes("/usr/local/bin/mcrypt");
Run Code Online (Sandbox Code Playgroud)
至...
$modes = mcrypt_list_modes("/usr/local/lib/libmcrypt");
$algorithms …
Run Code Online (Sandbox Code Playgroud) 下面的代码是查询我正在建立的大学项目的搜索引擎的在线词库,但我遇到了file_get_contents
"未能打开流"错误的问题.当我发送词库时,词库无法识别,它会引发错误.我正在尝试编写一段代码来忽略错误,只是在没有信息的情况下继续进行.
$thesaurus_search="http://words.bighugelabs.com/api/2/0089388bb57f/".$this->formatted_query."/php";
$result_thesaurus=file_get_contents($thesaurus_search);
Run Code Online (Sandbox Code Playgroud)
我试过了:
if (file_get_contents($thesaurus_search) != NULL)
{ // do stuff }
Run Code Online (Sandbox Code Playgroud)
...但它不起作用,因为它仍然返回某种字符串.
我该怎么处理这种情况?
php ×7
c ×2
activerecord ×1
awk ×1
centos ×1
codeigniter ×1
curl ×1
dataprovider ×1
ereg ×1
gcc ×1
json ×1
linux ×1
malloc ×1
mcrypt ×1
memory ×1
pcre ×1
phpunit ×1
preg-match ×1
preg-replace ×1
shell ×1
time ×1
unit-testing ×1
user-agent ×1
youtube-api ×1