首页 > 编程技术 > php

用simpleXML获取php.net的RSS

发布时间:2016-11-25 16:11

simpleXML是php5的新特性。RSS是如今比较流行的哈。这里提供一个简单的演示,来获取php.net的RSS
复制内容到剪贴板
代码:
<?  
$cache="phpnews.xml";  
$rssurl="http://www.php.net/news.rss";  
header("content-type:text/html;charset=utf-8");  
if( file_exists("$cache") )  

{  

$m=filemtime("$cache");  

$n=time();  

if($n-$m>10800)  
{  
$rss=simplexml_load_file("$rssurl");  
$rss->asXML("$cache");  

}  
else  
$rss=simplexml_load_file("$cache");  
  
}  

else  
{  
$rss=simplexml_load_file("$rssurl");  
$rss->asXML("$cache");  

}  

  
foreach($rss->item as $item)  

  
print "<a href="$item->link" target=_blank> $item->title </a><br>n";  

  

?> 
 

< http://www.111cn.net/html/00/54500_itemid_29653.html

一个六位数,当分别用2,3,4,5,6乘它后,得到的五个乘积都是一个六位数,而且这得到的五个数是由原来六个数字组成,只是顺序改变了!
求高手帮助解决下!




---------------

貌似大家都默认了一个现象
http://www.111cn.net/viewthread.php?tid=54377&page=5#pid394850

之前提出的一个假设 貌似大家做算法的时候都不考虑这种情况的存在可能 如果哪位有论证过这种假设不成立或者楼主的题目本身就默认不考虑这种假设 请大侠们说明一下

如果没有论证或者题目没有明确说明不考虑这种假设 算法设计再好也是不合题意的无效算法


------------------------



写了两种算法:
第一种思路是判断相乘的数的各个位之和是否相等,不过效率不太好。
第二种算法换了一种思路,用了字符反方向验证,因为正向会有一部分高位的不必要的运算。代码很简洁,效率很不错,附上代码:

第一种算法,判断各个位数之和:


===========================================================

第二种算法,字符反方向查询:



第一个算法在我的PE2140@2.66GHz上需要440ms,第二种只需要180ms。




---------------------------------



我之前提过这个问题了http://www.111cn.net/bbs/thread-54377-2-1.html

解决的方法有一个:
得出每一位,逐个位排除.
如得两个位数相同,则两个同时删除或更改.
比如:
''123451''和''123456''
逐位删除或更改的话,剩下的一位就不等了.





----------------------------------



for($i = 100000;$i < 166667;$i++)  //数的范围
{
....
        for($ii=2;$ii<7;$ii++)  // 2-6的倍数
        {
.....
                for($j=0;$j<6;$j++)           //数的个数
                {
if(strpos($i,substr($i*$ii,$j,

1.如果一个方法可静态化,就对它做静态声明。速率可提升至4倍。

2.echo 比 print 快。

3.使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接。

4.在执行for循环之前确定最大循环数,不要每循环一次都计算最大值。

5.注销那些不用的变量尤其是大数组,以便释放内存。

6.尽量避免使用__get,__set,__autoload。

7.require_once()代价昂贵。

8.在包含文件时使用完整路径,解析操作系统路径所需的时间会更少。

9.如果你想知道脚本开始执行(译注:即服务器端收到客户端请求)的时刻,使用$_SERVER[‘REQUEST_TIME’]要好于time()。

10.函数代替正则表达式完成相同功能。

11.str_replace函数比preg_replace函数快,但strtr函数的效率是str_replace函数的四倍。

12.如果一个字符串替换函数,可接受数组或字符作为参数,并且参数长度不太长,那么可以考虑额外写一段替换代码,使得每次传递参数是一个字符,而不是只写一行代码接受数组作为查询和替换的参数。

13.使用选择分支语句(译注:即switch case)好于使用多个if,else if语句。

14.用@屏蔽错误消息的做法非常低效。

15.打开apache的mod_deflate模块。

16.数据库连接当使用完毕时应关掉。

17.$row[‘id’]的效率是$row[id]的7倍。

18.错误消息代价昂贵。

19.尽量不要在for循环中使用函数,比如for ($x=0; $x < count($array); $x)每循环一次都会调用count()函数。

20.在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度相当。

21.递增一个全局变量要比递增一个局部变量慢2倍。

22.递增一个对象属性(如:$this->prop++)要比递增一个局部变量慢3倍。

23.递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。

24.仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局部变量)。PHP大概会检查看是否存在全局变量。

25.方法调用看来与类中定义的方法的数量无关,因为我(在测试方法之前和之后都)添加了10个方法,但性能上没有变化。

26.派生类中的方法运行起来要快于在基类中定义的同样的方法。

27.调用带有一个参数的空函数,其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。

28.用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会。当然,只有当你不需要在字符串中包含变量时才可以这么做。

29.输出多个字符串时,用逗号代替句点来分隔字符串,速度更快。注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中说echo是语言结构,不是真正的函数,故把函数加上了双引号)。

30.Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面,少用脚本。

31.除非脚本可以缓存,否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100%的性能,以免除编译开销。

32.尽量做缓存,可使用memcached。memcached是一款高性能的内存对象缓存系统,可用来加速动态Web应用程序,减轻数据库负载。对运算码 (OP code)的缓存很有用,使得脚本不必为每个请求做重新编译。

33.当操作字符串并需要检验其长度是否满足某种要求时,你想当然地会使用strlen()函数。此函数执行起来相当快,因为它不做任何计算,只返回在 zval 结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步 骤,如字母小写化(译注:指函数名小写化,PHP不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。在某些情况下,你可以使用isset() 技巧加速执行你的代码。

(举例如下)
if (strlen($foo) < 5) { echo “Foo is too short”; }
(与下面的技巧做比较)
if (!isset($foo{5})) { echo “Foo is too short”; }

调用isset()恰巧比strlen()快,因为与后者不同的是,isset()作为一种语言结构,意味着它的执行不需要函数查找和字母小写化。也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。

在javascript中使用php风格的$globals

JavaScript有隐含的全局变量。当你不使用var来定义a = 1,而直接定义a=1时,这个变量a将成为一个全局变量。有的认为这是一个错误,应该避免全局变量,因为它们往往会在意想不到的地方出错,尤其是在项目参与人员很多的情况下。

在PHP当中,默认的是局部变量。如果你需要一个全局变量,那么你必须要将要声明为全局变量的变量放到$globals这个数组中。

怎样在javascripts中使用$globals呢?通过为全局公约在你的javascripts呢?在脚本文件顶部声明:
$GLOBALS = {};
那么每一次当你需要一个全局变量,您可以这样做:

$GLOBALS[ '' myglob '' ] = 1 ; / /非常像PHP的样式

或者如果你喜欢,也可以这样:

$globals.myglob = 1 ;
这样做的优点:

     *全局变量容易识别(甚至从飞机都可以看见)
     *如果变量不定义成$GLOBAL,那么它就是局部变量。如果变量没有使用var,那么它将产生一个错误

缺点:

     *这种使用方法,不是官方规定的,不强制使用,只是一项约定俗成的方法。

 

 

Stoyan Stefanov''s Blog: PHP-style $GLOBALS in Javascript?

Javascript has implied globals. When you skip the var in var a = 1; and go a = 1;, then a becomes a global variable. Some consider this an error in the language. Global variables should be avoided because they tend to overwrite each other in unexpected places, especially if the project grows in LOC and number of developers.
In PHP on the other hand, variables are local. If you need a global variable, then you have to have to be explicit about it using the $GLOBALS superglobal array.
So how about this: adopt the $GLOBALS convention in your JavaScripts? At the top of the script you go:
$GLOBALS = {};
Then every time you need a global variable, you do:
$GLOBALS[''myglob''] = 1; // very PHP-like
or if you prefer:
$GLOBALS.myglob = 1;
Benefits of the approach:
• global variables easy to spot (even from an aeroplane)
• if it''s not $GLOBAL, it''s meant to be local. If it''s missing the var, it''s an error
Drawback:
• It''s a convention, so it can only help, but not enforce any coding practices

PHP提供了使用其crypt()函数完成单向加密功能的可能性。
  string crypt (string input_string [, string salt])
  其中的input_string参数是需要加密的字符串,第二个可选的salt是一
个位字串,它能够影响加密的暗码,进一步地排除被称作预计算攻击的可能
性。缺省情况下,PHP使用一个2个字符的DES干扰串,如果你的系统使用的是
MD5,它会使用一个12个字符的干扰串。顺便说一下,可以通过执行下面的命
令发现系统将要使用的干扰串的长度:
    print "My system salt size is: ". CRYPT_SALT_LENGTH;
  系统也可能支持其他的加密算法。crypt()支持四种算法,下面是它支持
的算法和相应的salt参
数的长度:
  算法                      Salt长度
  CRYPT_STD_DES         2-character (Default)
  CRYPT_EXT_DES         9-character
  CRYPT_MD5              12-character beginning with $1$
  CRYPT_BLOWFISH        16-character beginning with $2$
  用crypt()实现用户身份验证
  作为crypt()函数的一个例子,考虑这样一种情况,你希望创建一段PHP
脚本程序限制对一个目录的访问,只允许能够提供正确的用户名和口令的用
户访问这一目录。我将把资料存储在我喜欢的数据库MySQL的一个表中。下面
我们以创建这个被称作members的表开始我们的例子:
mysql>CREATE TABLE members (
    ->username CHAR(14) NOT NULL,
    ->password CHAR(32) NOT NULL,
    ->PRIMARY KEY(username)
    ->);
  然后,我们假定下面的数据已经存储在该表中:
  用户名               密码
  clark          keloD1C377lKE
  bruce         ba1T7vnz9Awgk
  peter         paLUvRWsRLZ4U
  这些加密的口令对应的明码分别是kent、banner和parker。注意一下每
个口令的前二个字母,这是因为我使用了下面的代码,根据口令的前二个字
母创建干扰串的:
  $enteredPassword.
  $salt = substr($enteredPassword, 0, 2);
  $userPswd = crypt($enteredPassword, $salt);
  // $userPswd然后就和用户名一起存储在MySQL中
  我将使用Apache的口令-应答认证配置提示用户输入用户名和口令,一个
鲜为人知的有关PHP的信息是,它可以把Apache的口令-应答系统输入的用户
名和口令识别为$PHP_AUTH_USER和$PHP_AUTH_PW,我将在身份验证脚本中用
到这二个变量。

标签:[!--infotagslink--]