sbf胜博发php使用curl获取跳转后的网址

( sbf胜博发 )

使用curl获取跳转后网址时,如果直接设置网址能够成功获取到,将网址赋值给变量,在使用变量传给curl就获取不到

$ch=  curl_init("http://www.baidu.com");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_exec($ch);
$aaa = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
echo $aaa;

以上代码能够获取到跳转后的网址;下面的写法就获取不到,获取到的是一个显示错误信息的页面网址;

$url="http://www.baidu.com";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_exec($ch);
$aaa = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
echo $aaa;

和这个是否通过变量初始化肯定是没关系的!

我运行你两段代码得到的结果是一样的,可能是特定版本的PHP或者libcurl中的问题,你可以抓包看看实际发了什么请求出去,服务器返回什么。

你在测试的时候,是放在一起测试的吧,记得close上一个,版本也不会有这个问题的(至少我没遇到过)

感谢各位的回答,由于我描述的不清晰,使大家没有发现问题出现的原因。晚上看了一会,找到了原因。我是通过手机百度搜索关键词,然后抓取搜索结果页面中特定的网址,由于我是在抓取成功后把网址打印到页面上,所以看不出网址有什么问题,当我查看页面源码的时候发现链接中的&字符被替换成了&,我将&替换成&后就正常了,能够得到想要的结果。

(看完/读完)这篇文章有何感想! sbf胜博发的分享…

sbf999胜博发官网换了cms,如何把之前系统的数据库里文章迁移过来。

( sbf999胜博发官网 )

之前akcms做的后台cms系统,用了大半年,现在要迁移到wordpress ,现在数据库应该有过千的文章数量,如何把他们从数据库迁移过来,还不打乱结构呢?前端,被委托做一个后台的修改维护,akcms比较冷门,百度找不到教程,所以请教各位大大,不胜感激。

查看一下mysql里面的数据结构,把对应的表插入到wordpress的表里面。

自己看一下akcms的数据库文章结构,然后导到wordpress就好了
本地测试没有问题再更新在线数据库

采集过来就行了,注意采集规则的对应

(看完/读完)这篇文章有何感想! sbf999胜博发官网的分享…

sbf胜博发怎么去做PHP分卷备份数据?

( sbf胜博发 )

我在做数据备份,遇到一个问题,设置的最大存储的2048kb,数据存储到最大,这里的时候需要重新备份到下一个文件中,怎么去记录最大的地方,下一个文件继续从记录的地方存?

ftell,fseek

(看完/读完)这篇文章有何感想! sbf胜博发的分享…

sbf胜博发php 怎么判断client socket断开

( sbf胜博发 )

php 怎么判断client socket断开

当连接断开时,读写socket的函数会失败。如socket_read()在读取失败时布尔值false。这时可以调用socket_last_error()和socket_strerror()函数得到错误代码和错误信息。可以根据这个判断失败原因是否为连接断开。

(看完/读完)这篇文章有何感想! sbf胜博发的分享…

sbf胜博发一个mysql优化的问题

( sbf胜博发 )

**log表结构如下**
id int(10) primary key #主键
ip varchar(32) #ip
time int(10) #时间
channel varchar(128) #渠道id 普通索引
status int(10) #状态标识

channel字段为几个渠道号channel01,channel02…channel20
status为不同的状态标识 比如1代表打开次数,2代表关闭次数等

需求是:
统计不同渠道 不同状态 每天的总ip数量
统计不同渠道 不同状态 每天的去重ip数量
统计不同渠道 不同状态 每天的新增ip数量(当天ip,且当天之前数据库中不存在的ip)

下面为统计渠道channel01,状态status=1的各项数量

目前的实现方法是:
比如2015-11-11当天的数量
先用php算出2015-11-11的凌晨时间戳$begin和2015-11-12的凌晨时间戳$end

**A-- 当天ip总数 $total**
SELECT COUNT(*) FROM log WHERE time>={$begin} AND time<{$end} AND status=1 AND channel=channel01;
**B-- 当天ip去重数 $group**
SELECT COUNT(*) FROM log WHERE time>={$begin} AND time<{$end} AND status=1 AND channel=channel01 GROUP BY ip;
**C-- 当天的ip   $ip_str (PHP处理)**
SELECT ip FROM log WHERE time>={$begin} AND time<{$end} AND status=1 AND channel=channel01 GROUP BY ip;
**D-- 当天ip在当天之前出现过的数量  $before**
SELECT COUNT(*) FROM log WHERE ip IN ($ip_str) AND time<{$begin} GROUP BY ip;
**E-- 新增的ip数量**
$new = $group - $before

现在表中一共有52万条数据,每天新增大概3万条数据,去重后的也有2万多,在执行第四步(语句D)的时候执行时间为3秒左右

请问有没有什么办法可以优化这个sql语句,或者有没有其它的什么方法实现这个需求?

你的这个表有很大问题。
IP不该用varchar(32),你想后续查询时,这比较得多低效。通用的做法是用unsigned int配合inet_aton函数。
类似的channel字段,如果固定不变,可以用enum代替varchar. 在varchar(128)上建索引,没有比这更低效的了。实在不想用enum可以考虑对局部做索引,比如前12个字符,具体看情况。
time字段应该纳入索引。你建一个索引,包含三个字段(channel, status, time),顺序很重要,少的在前多的在后。

d中in的效率比较低,用所有ip减1天前所有ip,group by 默认显示最上面的一条数据,时间上可能还要排序吧

去重IP的SQL可以使用如下改进:
B) 当天ip去重数

SELECT COUNT(DISTINCT ip) 
  FROM log 
 WHERE time >= {$begin} 
       AND time < {$end} 
       AND status = 1 
       AND channel = channel01;

C) 当天ip去重列表

SELECT DISTINCT ip
  FROM log 
 WHERE time >= {$begin} 
       AND time < {$end} 
       AND status = 1 
       AND channel = channel01;

D) 当天ip在当天之前出现过的去重数量 写法类似于B

这种问题应该用计数器来解决,尽量避免复杂逻辑查询,不然数据量足够多的时候很难搞的。
计数器可以直接用db或者memcache,redis之类来做。
或者每天定时跑脚本进行数据统计,实时查看mysql不合适

(看完/读完)这篇文章有何感想! sbf胜博发的分享…

胜博发娱乐平台php有没有可以支持微信登陆的独立user类库?

( 胜博发娱乐平台 )

php有没有可以支持微信登陆的独立user类库?

开发一些小程序,可用户安全甚至比业务代码还复杂,痛求可以支持微信登陆的独立php用户类库!

可能是目前最优雅的微信公众平台 SDK 了

https://github.com/overtrue/wechat

(看完/读完)这篇文章有何感想! 胜博发娱乐平台的分享…

胜博发娱乐平台如果update执行失败了,该怎么处理比较合适?

( 胜博发娱乐平台 )

批量就是比如晚上批量更新用户数据。语句就是简单的update,因为这块业务很重要,所以想做点容错处理,但是不知道具体怎么实施。单纯从update语句上来讲,我觉得出错了好像也没必要重试了,失败了就是失败了。。。。。记录下错误数据,然后手工排错,以我的经验我只能想到这种比较low的方法,所以比较纠结。。。

批量更新是什么意思 记下错误日志没用啊 你可能需要回滚或者重试 这根据你具体业务而定

很多你没说清楚。
我先把你这设定为是CMS官方的解决方案。
一个是提示管理员是否重试,一个是给出手动更新方法,一个是反馈错误信息。

(看完/读完)这篇文章有何感想! 胜博发娱乐平台的分享…

sbf999胜博发官网thinkphp关联模型 多对多 插入 怎么使用?????

( sbf999胜博发官网 )

$u = D('user');
        $u->name = 'xiak';
        $u->password = 'qqqqqq';
        $u->shop = array(
                'gg' => '1',
            );
        $u->relation(true)->add($data);
user(id, name)
shop(id, name)
user_shop(user_id,shop_id)
class UserModel extends RelationModel {
    protected $_link = array(
        'shop' => array(
            'mapping_type' => self::MANY_TO_MANY,
            'relation_table' => '__USER_SHOP__',
                            )
                       }

怎么没有效果啊?

sql调试是这样的:

[user] SHOW COLUMNS FROM `tb_user` (executeTime: 0.009001s )
 [user] INSERT INTO `tb_user` (`name`,`password`) VALUES ('xiak','qqqqqq') (executeTime: 0.117007s )
 [shop] SHOW COLUMNS FROM `tb_shop` (executeTime: 0.013001s )
 [shop] INSERT INTO tb_user_shop (user_id,shop_id) SELECT a.id,b.id FROM tb_user AS a ,tb_shop AS b where a.id =45 AND b.id IN (1) (executeTime: 0.001000s )

手册上说 当MANY_TO_MANY时,不建议使用关联插入。是什么意思啊?

难道就没有人跟我一样,觉得分拆SQL再加事务才是最好的方案吗,关联的SQL其它人看起来是不是很受罪呢

(看完/读完)这篇文章有何感想! sbf999胜博发官网的分享…

sbf999胜博发官网PHP 数据库,一个表中有多个用户的多个记录,如何获取这个表中的每个用户的最值

( sbf999胜博发官网 )

如图(1),有这么一张表,表中有多个用户的、多个记录;
我想得到的是这个表中的每个用户的speed 这一栏的最值,如图(2)(只看数据)

告诉我怎么个思路就可以

谢谢哟 ^_^

【图 1】

【图 2】

select user, max(speed) from table group by user

第一次统计,后续通过缓存方案

(看完/读完)这篇文章有何感想! sbf999胜博发官网的分享…

胜博发娱乐平台请问Laravel5.1有比较好用的无限分类(树)的Packages吗?

( 胜博发娱乐平台 )

请问Laravel5.1有比较好用的无限分类(树)的Packages吗?谢谢。

如果封装好以下特性就更棒了:

  • 一维数组无限分类

  • 多维数组无限分类

  • 传递一个子级分类ID返回所有的父级分类

  • 传递一个父级分类ID返回所有的子级分类

PS:我自己已经写好一个分类Model在使用了,上述功能也实现,我想参考一下别人的写法,看看是否自己代码存在改进的地方。

父子id,父子路径,一般都是这种实现方式,重点在于从数据库出来形成tree的过程。

你问的这些自己手动也可以写啊

(看完/读完)这篇文章有何感想! 胜博发娱乐平台的分享…

sbf胜博发PHP中false和true问题

( sbf胜博发 )

举个例子

var_dump(true == -1);//true

PHP中的true和false到底对应的个啥?

我感觉这个问题你可以看看手册
给了和详细的说明

在PHP中任何类型的值, 与bool比较都会被转化成bool比较

当转换为 boolean 时,以下值被认为是 FALSE:
布尔值 FALSE 本身
整型值 0(零)
浮点型值 0.0(零)
空字符串,以及字符串 “0”
不包括任何元素的数组
不包括任何成员变量的对象(仅 PHP 4.0 适用)
特殊类型 NULL(包括尚未赋值的变量)
从空标记生成的 SimpleXML 对象

如果有不对的地方还请谅解

你可以百度一下“PHP的类型转换规则”:
整型 转 布尔型 情况下
0 转换为 FALSE ,非零的其他整型数字转换为 TRUE

false == 0
true == !false == !0

(看完/读完)这篇文章有何感想! sbf胜博发的分享…

sbf胜博发高并发的API接口选用什么PHP框架合适?

( sbf胜博发 )

现在使用的是kohana。

yaf phalcon 都不错,c写的框架,性能上不错

没有看到swoole的身影。实在忍不住出手。
要高并发,yaf实在是不合适。yar还稍微说的过去。
个人的建议是:
swoole + apache thrift

Yaf的其实本质上讲,是个基础框架,仅提供了一个简单粗暴的基础URI路由功能,完事了。
最关键是并发和多线程以及定时器等等,Yaf本身不能实现。
所以swoole这个时候,优势突显。swoole可以以deamon形式长期稳定的运行在server上,直接走socket,提供并发服务。
而集成了thrift后,就可以为各种其他端提供数据。比如app,web网页(这个时候,可以用yaf当作前端读取数据提供高性能),甚至为C,c++等端进行数据交互,非常方便。

三种方案
1、大而全的框架
Yii laravel

2、轻路由框架
Lumen Slim

3、异步框架
ReactPHP
https://github.com/reactphp/react

考虑你的业务场景,业务场景复杂就用1,需要快速实现灵活度高可以尝试2、如果有大量IO操作的场景可以用3

可以考虑我写的 Blink Framework https://github.com/bixuehujin/blink,其设计意图便是用于构建高性能 API 服务。

Blink 是一个为构建 “long running” 服务而生的 Web 微型高性能框架,底层基于 Swoole 的 http server,性能有保障。

Blink 为构建 Web 应用程序提供简洁优雅的API,可扩展性好,允许开发者更加灵活自如的使用,提供了常见诸如路由、登陆认证、依赖注入、日志处理 等组件。

高并发本质和框架是无关的。。。框架只是封装了一些组件,高并发还得看架构设计,异步消息队列怎么搞,缓存怎么搞,不能单单寄希望于框架,不然的话,最后你会发现加框架和不加框架会是一个效果。。

这和框架有多大关系?

用你最熟悉的框架就好
高并发主要关注两点:
1,系统架构
2,业务逻辑 这个跟框架还算有点关系,不过关注点不在用什么框架

系统架构
主要是考虑的负载, 网络请求支持,运维轻松搞定,商量好方案,慢慢加机器就好

业务逻辑
这块做为开发人员,要知道业务本身压力是在数据库读写,文件读写
可以根据情况做缓存方案 和 异步处理方案

在真正的高并发下,程序逻辑本身和单点都会是瓶颈,做好负载均衡解决方案,才是支持无限增长高并发的终极解决方案

高并发和框架无关吧

高并发的API性能取决于架构和缓存以及数据库!!!和框架没任何关系!!!

PHP 框架, 本来解决的问题就是开发效率, 相比 JAVA, C/C++ 来说, PHP 的执行效率够慢的, 框架还是一堆代码构建于 PHP 之上, 所以追求极致性能的话, 不建议用 PHP 来做

一般高并发php充当的是中间层的角色,java做一些基础架构会包掉大部分逻辑,所以其实php也就是从后端拿数据做这些数据的定制化给前端,并做一些鉴权处理,所以其实做的是接口包装的事情所以可以选择一些轻量高效的,如果考虑学习成本可以试着用类似于slim这种简单的框架,如果团队够强直接上鸟哥的yaf,还有一种场景就是php即是子应用也是服务,也就是soa的服务部分不是java了而是用了世界上最好的编程语言php那么他们之间的通信就是一个大问题,好在鸟哥还有一款yar的好东西,所以据了解微博用的就是yaf,yar,我不是微博的所以多了也不知道了,不过选什么根据自己的场景做个分析吧,不能拷贝其他公司的模式的

一般瓶颈不在PHP,在IO。所以选什么不重要。重要的是熟悉。出现问题,能快速修复

必须是鸟哥的yar

Yaf是鸟哥的成名作,要用框架又要追求高性能就用Yaf吧,据说百度内部用的也是Yaf的修改版.
Yaf最新版本是2015-09-06发布的2.3.5:
http://pecl.php.net/package/yaf
http://php.net/manual/zh/book.yaf.php

lumen.

Swoole

php7…

为什么逗谈框架

可以用yaf,推荐搭建hhvm或者php7 。

io密集型的高并发应该用epoll模型将并发调度到io层,然后就是进行db的设计了,理论上跟cgi关系不大了。如果你说的是CPU密集型的高并发请忽略我的回答

我要是说YII2会不会被打?

yaf 或者 lumen

公司目前用yaf

BulletPHP

(看完/读完)这篇文章有何感想! sbf胜博发的分享…

sbf胜博发大家自己写过哪些PHP框架或者工具?求链接

( sbf胜博发 )

大家自己写过哪些PHP框架或者工具?求链接

我为自己的网站写了个框架,一直在使用 http://github.com/yeaha/Lysine2,每天处理几百万的动态请求

  • RESTful风格的controller
  • 内置DataMapper方式的ORM实现,比ActiveRecord更方便的是后端不仅仅局限于关系式数据库,可以方便的切换为mongodb等存储服务,而model api基本保持不变,且便于分库和分表
  • 支持layout方式的视图
  • mysql/postgresql/sqlite adapter
  • 常用缓存redis/memcached adapter
  • 日志记录
  • 单元测试完整

总计代码4616行,168K,最大的毛病是没文档

Lysine2/src
|-- class_files.php
|-- context.php
|-- core.php
|-- curl.php
|-- datamapper.php
|-- error.php
|-- functions.php
|-- http.php
|-- loader.php
|-- logging.php
|-- mvc.php
|-- service
|   |-- amqp.php
|   |-- db
|   |   |-- mysql.php
|   |   |-- pgsql.php
|   |   `-- sqlite.php
|   |-- db.php
|   |-- manager.php
|   |-- memcached.php
|   `-- redis.php
|-- session.php
`-- traits.php

phploc统计结果:

Size
  Lines of Code (LOC)                             4616
  Comment Lines of Code (CLOC)                     203 (4.40%)
  Non-Comment Lines of Code (NCLOC)               4413 (95.60%)
  Logical Lines of Code (LLOC)                    1567 (33.95%)
    Classes                                       1402 (89.47%)
      Average Class Length                          23
      Average Method Length                          3
    Functions                                      116 (7.40%)
      Average Function Length                        4
    Not in classes or functions                     49 (3.13%)

Complexity
  Cyclomatic Complexity / LLOC                    0.40
  Cyclomatic Complexity / Number of Methods       2.41

Dependencies
  Global Accesses                                   28
    Global Constants                                 2 (7.14%)
    Global Variables                                 3 (10.71%)
    Super-Global Variables                          23 (82.14%)
  Attribute Accesses                               432
    Non-Static                                     411 (95.14%)
    Static                                          21 (4.86%)
  Method Calls                                     530
    Non-Static                                     465 (87.74%)
    Static                                          65 (12.26%)

Structure
  Namespaces                                        12
  Interfaces                                         2
  Traits                                             3
  Classes                                           60
    Abstract Classes                                 5 (8.33%)
    Concrete Classes                                55 (91.67%)
  Methods                                          395
    Scope
      Non-Static Methods                           370 (93.67%)
      Static Methods                                25 (6.33%)
    Visibility
      Public Method                                314 (79.49%)
      Non-Public Methods                            81 (20.51%)
  Functions                                         26
    Named Functions                                 21 (80.77%)
    Anonymous Functions                              5 (19.23%)
  Constants                                         55
    Global Constants                                 5 (9.09%)
    Class Constants                                 50 (90.91%)

https://gist.github.com/yeaha/672178
这是一个展示存储服务路由配置的代码片段,用于展示如何分库
配置好以后由mapper使用,对data model完全透明

我写了几个有点另类的框架:

高性能 PHP Socket 服务器框架 workerman
PHP Thrift Rpc远程调用框架 workerman-thrift-rpc
PHP Json Rpc远程调用框架 workerman-json-rpc
PHP聊天室框架 workerman-chat

以上框架都是用PHP Daemon运行的,不用安装 apache、nginx、php-fpm这些软件就能直接跑。

workerman性能很强悍,我每天用它处理过亿的订单请求。

这个帖应该是毛遂自荐帖咯?

之前因为很喜欢fatfree的路由控制(说实话单独的路由控制没找到比fatfree更让我喜欢的),但是因为数据库和模板操作这边我也有其它喜欢的,所以昨天(还是前天?)把fatfree的路由功能给剥离了出来,不是我自己写的,不过也算是独有的(Github没搜到相关的项目),拿出来分享给题主吧,项目地址是:http://github.com/lizheming/F3router

框架这部分的话再推荐两个不是我自己写的东西吧(我是真的很喜欢你造嘛!)。数据库操作推荐一下喵饭大大的 Medoo 以及模板引擎推荐一下 Twig。不过模板这方面如果是做自己用的东西的话我更倾向于用原生的PHP语法去写。

框架因为用的东西不多,能说的也就这么几个了。关于工具的话,之前因为 Jekyll 和 Octopress 的流行,写过一个PHP版的静态博客生成器。很早些的,大换血过好几个版本,一直在更新,项目地址是:http://github.com/lizheming/pmblog

能拿得出手的东西就这么一点了,有问题欢迎反馈。

推荐自己的LitPHP

推荐理由:0.1版本代码行数=270行,表现力丰富,自由整合任何模板/ORM解决方案,有实际生产项目

官网
Github Repo
开发分支
教程
设计理念

一生PHP功力化繁为简凝聚而成。除了组织代码和一些路由之外,没有任何功能,删无可删。也就是说任何功能都由你自己适配上去从而保持100%控制权,任何自己喜欢的模式都可以轻松套进去。

做框架的框架,让每个应用都躺在量身打造的框架中。

代码:

https://github.com/liaohuqiu/cube-php

文档:

http://cube-php.liaohuqiu.net/

这三年来一直在用的东西,这个框架支撑起来的业务曾经红极一时。名字随便起的,代码也还没完全整理好。

好些时间没写php了,最近忙里偷闲,重新拾起,开源出去,了一个念想,换一个纪念。


  1. 实现标准的autoload规则,允许各种框架接入
  2. 分库分表
  3. 极其简单的路由
  4. 对话框,ajax请求,客户端API请求,5分钟可以上手。
  5. 附送一个管理后台
  6. 附送一个JS框架

https://github.com/lloydzhou/router

  1. 一个只有100行的路由控制器,算不上框架了。

  2. 不使用正则表达式做路由映射,而是根据pathinfo创建树形结构,保证路由查找速度稳定在Olog(n)。

  3. 支持hook,可以用来过滤参数,检查登录等。

  4. 支持根据handler参数列表自动获取变量,与hook结合使用,再也不用满篇写GET POST变量了。。。

(看完/读完)这篇文章有何感想! sbf胜博发的分享…

胜博发娱乐平台Php file_get_contents非常慢

( 胜博发娱乐平台 )

用get拉取一个url的内容,每次10秒左右,不知道是什么原因?

不贴代码,不贴URL,题主你是在逗嘛。。。
慢就是慢咯,要么你的网速慢,要么对方服务器慢,没什么别的原因。

同意楼上的说法,代码贴出来

用 pecl_http or curl 代替之

(看完/读完)这篇文章有何感想! 胜博发娱乐平台的分享…