www.qiangui777.comphp 如何获取字符串拼音首字母

( www.qiangui777.com )

例如:$str = ‘中华人民’;

返回来 ZHRM;

下面是我百度的一个函数,但是有的情况会出错,例如: 重庆

返回来的是 ZQ

function getfirstchar($s0) {
        $firstchar_ord = ord(strtoupper($s0{0}));
        if (($firstchar_ord >= 65 and $firstchar_ord <= 91)or ( $firstchar_ord >= 48 and $firstchar_ord <= 57))
            return $s0{0};
        $s = iconv("UTF-8", "gb2312", $s0);
        $asc = ord($s{0}) * 256 + ord($s{1}) - 65536;
        if ($asc >= -20319 and $asc <= -20284)
            return "A";
        if ($asc >= -20283 and $asc <= -19776)
            return "B";
        if ($asc >= -19775 and $asc <= -19219)
            return "C";
        if ($asc >= -19218 and $asc <= -18711)
            return "D";
        if ($asc >= -18710 and $asc <= -18527)
            return "E";
        if ($asc >= -18526 and $asc <= -18240)
            return "F";
        if ($asc >= -18239 and $asc <= -17923)
            return "G";
        if ($asc >= -17922 and $asc <= -17418)
            return "H";
        if ($asc >= -17417 and $asc <= -16475)
            return "J";
        if ($asc >= -16474 and $asc <= -16213)
            return "K";
        if ($asc >= -16212 and $asc <= -15641)
            return "L";
        if ($asc >= -15640 and $asc <= -15166)
            return "M";
        if ($asc >= -15165 and $asc <= -14923)
            return "N";
        if ($asc >= -14922 and $asc <= -14915)
            return "O";
        if ($asc >= -14914 and $asc <= -14631)
            return "P";
        if ($asc >= -14630 and $asc <= -14150)
            return "Q";
        if ($asc >= -14149 and $asc <= -14091)
            return "R";
        if ($asc >= -14090 and $asc <= -13319)
            return "S";
        if ($asc >= -13318 and $asc <= -12839)
            return "T";
        if ($asc >= -12838 and $asc <= -12557)
            return "W";
        if ($asc >= -12556 and $asc <= -11848)
            return "X";
        if ($asc >= -11847 and $asc <= -11056)
            return "Y";
        if ($asc >= -11055 and $asc <= -10247)
            return "Z";
        return null;
    }

可以使用 http://overtrue.me/pinyin/,开源项目

多音字没办法解决,除非你自己写枚举排除

(看完/读完)这篇文章有何感想! www.qiangui777.com的分享…

钱柜777唯一官网Yii2联表查询不能查个别字段?

( 钱柜777唯一官网 )

当不联表时,可以查个别字段。

$user->find()->select(['userid', 'username'])->asArray()->all();

然后SQL也很正常

select userid, username from ...

但联表时。。。

$user->find()
->joinWith([
    'account' => function ($object) {
        $object->select(['account_name', 'account_level', 'account_status']);
    },
    'bank' => function ($object) {
        $object->select(['bank_name', 'bank_province', 'bank_branch', 'bank_account']);
    }
])
->asArray()
->all();

我看了下查询SQL居然是

select * from ....

坑爹呢这是?还是是我用的方法有问题??

你应该把select写在joinWith外面:

$user->find()->select(['account_name', 'account_level', 'account_status', 'bank_name', 'bank_province', 'bank_branch', 'bank_account'])
->joinWith(['account', 'bank'])
->asArray()
->all();

当然会是 select * 因为你的操作只是在限定了查询关联表的时候会指定select字段.

所以还是向你单个的那样,指定select就好

(看完/读完)这篇文章有何感想! 钱柜777唯一官网的分享…

www.qiangui777.comnotify_url这个页面应该是怎样写,怎样才能获取支付成功后的支付宝通知过来的消息

( www.qiangui777.com )

notify_url这个页面应该是怎样写,怎样才能获取支付成功后的支付宝通知过来的消息,怎样通过异步回调对订单的支付状态实时处理

支付宝对接文档里有支付宝会如何调用的你notify_url的说明,你根据所列举的参数获取到支付宝给出的信息,再对订单进行处理就可以了。另外,需要保证你的地址能够被支付宝访问到,也就是说你的地址应该在公网上能够访问。

支付宝支付成功以后会有同步、异步 2种回调, 同步跳转的网页可以被用户掐掉, 所以支付回调写在异步回调比较好。
异步回调怎么写的话, 注意以下:

  1. 一定要做log,把接受到的参数和回复的参数及关键步骤的结果存log。

  2. 防重复提交处理。其实也就是回调的主要业务逻辑了。(给用户加钱,改字段什么的)

支付宝的文档都是有各个语言的demo的, 几乎改一改就可以用。然后修改来适应自己的框架就可以了。

(看完/读完)这篇文章有何感想! www.qiangui777.com的分享…

qiangui777php pdf文件转图片

( qiangui777 )

为什么会文件读取不到,路径 pdf文件权限都已设置

$PDF = './22.pdf';

$IM =new imagick();
   $IM->setResolution(120,120);
   $IM->setCompressionQuality(100);
   $IM->readImage($PDF);
   foreach($IM as $Key => $Var){
       $Var->setImageFormat('png');
       $Filename = './'.md5($Key.time()).'.png';
       if($Var->writeImage($Filename)==true){
           $Return[]= $Filename;
       }
   }

报错内容:Fatal error: Uncaught exception ‘ImagickException’ with message ‘Failed to read the file’ in

$PDF使用绝对路径呢

try {
    // read img
}  catch (ImagickException $e) {
    echo  exception;
}

(看完/读完)这篇文章有何感想! qiangui777的分享…

www.qiangui777.comPHP实现爬取京东 天猫 商品SKU信息问题?

( www.qiangui777.com )

PHP如何获取 京东 天猫 淘宝的商品价格,库存,链接 等信息?
比如我现在想获取京东上所有的iPhone6s各个规格的SKU的价格,如何做呢
有现成的类库吗?

京东和天猫都有接口可以获取商品信息,研究一下官方文档。

用fiddler抓下他们App的商品接口,分析下接口信息。开爬~

(看完/读完)这篇文章有何感想! www.qiangui777.com的分享…

www.qiangui777.com无法访问本地PHP项目

( www.qiangui777.com )

wamp可以访问localhost,但是不能访问本地的PHP项目,配置好vhost和host
报错为

无法访问此网站
找不到 test.laravel.com 的服务器 DNS 地址。
DNS_PROBE_FINISHED_NXDOMAIN

ping本地的域名也ping不通。困扰我好几天,以前都没有问题。

用xammp吧

没看懂你的问题,使用vue.js + laravel开发单页面应用,我这篇博文里讲了如何用phpstudy配置项目,你可以参考下,在windows环境下开发php,我建议是使用phpstudy集成开发环境

先检查hosts,然后检查虚拟主机,hosts的问题比较大

(看完/读完)这篇文章有何感想! www.qiangui777.com的分享…

www.qiangui777.com七牛上传成功了,但是访问的时候老是报错{“error”:”bad oauth request”}

( www.qiangui777.com )

代码如下:

foreach ($filenames as $k => $v) {
            if ($v != "." && $v != "..") {
                // 需要填写你的 Access Key 和 Secret Key
                $accessKey = '';
                $secretKey = '';
                $domain = "http://o8ouat0ny.qnssl.com/";
                // 构建鉴权对象
                $auth = new \Qiniu\Auth($accessKey, $secretKey);
                // 要上传的空间
                $bucket = 'phone-recording';
                // 生成上传 Token
                $token = $auth->uploadToken($bucket);
                // 要上传文件的本地路径
                $filePath = public_path() . '/phone-records/' . $v;
                // 上传到七牛后保存的文件名
                $key = $v;
                // 初始化 UploadManager 对象并进行文件的上传
                $uploadMgr = new UploadManager();
                // 下载凭证有效时间
                //$duetime = 31536000;
                // 调用 UploadManager 的 putFile 方法进行文件的上传
                list($ret, $err) = $uploadMgr->putFile($token, $key, $filePath);
                if (is_null($err)) {
                    //var_dump($domain.$ret['key'].'?e='.$duetime.'&token='.$token);
                    return $domain.$ret['key'].'?token='.$token;
                } else {
                    var_dump($err);
                }
            }
        }

返回值:

http://o8ouat0ny.qnssl.com/xiaoyin04.mp3?token=0aWD7M62qvq1ehkx53Kx1yOR8qtawHOkg9lsp90W:wibT2Kc5KHlhc90KYDk4oXCXyPs=:eyJzY29wZSI6InBob25lLXJlY29yZGluZyIsImRlYWRsaW5lIjoxNDY1ODIxMTU5fQ==

访问时出现:{"error":"bad oauth request"}

如果你是测试环境,请使用公开库测试,如果是生产环境使用私有库的时候,访问时会要求认证。具体认证方式请参考官方文档。

生成私有链接地址为七牛方法:

$auth = new \Qiniu\Auth($accessKey, $secretKey);
$url = $auth->privateDownloadUrl($baseUrl, $expires = 3600);

(看完/读完)这篇文章有何感想! www.qiangui777.com的分享…

钱柜777唯一官网php如何防止utf-7 反射xss 漏洞。

( 钱柜777唯一官网 )

使用的是 yii1.1框架

        $req = Yii::app()->request;
        $purifier = new CHtmlPurifier();
        $purifier->options = array(
            'URI.AllowedSchemes'=>array(
                'http' => true,
                'https' => true,
            )
        );
            $url = $purifier->purify($req->getParam('url'));

所有的参数都使用 purify 过滤了。但是还是有这个漏洞。请问如何解决。有比较好的解放方案吗

1 自定义方法 过滤常用xss攻击标签:script|iframe|image/Uis
2 配置方向考虑:设置httponly禁止获取cookie
3 服务方向:使用SSL协议,禁止加载外部js

(看完/读完)这篇文章有何感想! 钱柜777唯一官网的分享…

www.qiangui777.comPhalcon 如何用事件去管理控制器

( www.qiangui777.com )

在控制器中定义一个 public $a=true;

假如现在访问的是 index/index

我想用事件来对 $a 判断 如果为true 就正常访问 index/index,如果为false 就转发请求到 index/index2

请问可以做到不,

最终执行:

Di::getDefault()->get('dispatcher')->forward([
    'contraller' => 'index',
    'action' => 'index2'
]);

事件的话,可以考虑dispatcherbeforeExecuteRoute.

(看完/读完)这篇文章有何感想! www.qiangui777.com的分享…

钱柜777唯一官网为什么$_POST无法取到值?

( 钱柜777唯一官网 )

phpstorm内置服务器post有bug,可用改用php的内置服务器

看我以前的解决方法

https://segmentfault.com/q/1010000005685200/a-1020000005685414

php文件里头为什么要写html。。

调试一下看看结果啊!直接在php文件里面var_dump($_POST);看看是不是有值

原因是你把PHP代码直接写在HTML里面的,


// HTML CODE

if ($_POST['a'] && $_POST['b'])
{
    //CODE..
}

这样子写当你get请求的时候, 由于$_POST此时时空的, 就会产生未定义的参数错误,

所以你确定你是post请求?

(看完/读完)这篇文章有何感想! 钱柜777唯一官网的分享…

钱柜777唯一官网php怎样不打断点分析程序过程?

( 钱柜777唯一官网 )

php或者java,需要看别人的程序,打不了断点,有没有可以不打断点查看程序执行过程的方法?

谢谢。

xdebug_start_trace和xdebug_end_trace,不谢,更详细的描述请关注我,私聊。

从栈上回溯。

你可以打log,个人认为看代码是最好的

xdebug + ide(phpstorm zs) 断点调试带你飞

file_put_contents();最常用的,比如 调试回掉接口,oauth认证都用这个

1.采用log日志
2.触发报错调试

(看完/读完)这篇文章有何感想! 钱柜777唯一官网的分享…

钱柜777唯一官网我看了好几个关于 ajax 的教程,可能是教程讲的不够深,我想问问 php 服务器返回N条信息怎么弄得?

( 钱柜777唯一官网 )

我看的教程 都是在服务器 echo string… 出一个字符串,
然后交给前台 js 处理.

我想问问就是类似于一些搜索页面,一下子返回几十条结果,是怎么弄的?

是返回一串字符串,然后用 切割成数组,然后再处理,

还是php 可以直接返回 一个对象,或者数组?

PHP的echo输出的是一个字符串, 但是你可以通过json_encode把一个数组格式为一串json, 就能返回多条信息了


$data = [];

$data[] = 'data1';
$data[] = 'data2';
$data[] = 'data3';
$data[] = 'data4';

$str = json_encode($data);
echo $str;
exit;

前端得到的就是一个数组对象了

json可以是数组的。。 比如你那种分页不就是嘛

返回一个数组,解析以后数组里面可以包含很多json,再根据数组长度创建相应数量的html元素就可以了

返回json数据

返回 json 或者 xml 格式的数据,首推 json

返回json数组,然后去遍历

个人觉得这个得看客户端网页(android,ios等不在此列)处理的复杂度,太复杂的话就在服务端生成HTML返回。
否则的话都返回json格式的数据,由客服端处理 json_encode($list);

当然 要返回xml也是可以的,只是照目前来看 json是主流了,php操作json也简单

(看完/读完)这篇文章有何感想! 钱柜777唯一官网的分享…

www.qiangui777.comRequest $request这么写是什么意思?

( www.qiangui777.com )

public function User(Request $request){}

http://php.net/manual/zh/language.oop5.typehinting.php

PHP 5 可以使用类型约束。
函数的参数可以指定必须为对象(在函数原型里面指定类的名字),接口,数组(PHP 5.1 起)或者 callable(PHP 5.4 起)。

官方例子

    /**
     * 测试函数
     * 第一个参数必须为 OtherClass 类的一个对象
     */
    public function test(OtherClass $otherclass) {
        echo $otherclass->var;
    }

Request就是一个类,$request就是它生成的一个对象!当然啦,也可以是接口之类的!

(看完/读完)这篇文章有何感想! www.qiangui777.com的分享…

www.qiangui777.comwhile循环中条件表达式疑惑

( www.qiangui777.com )

while ($i = 'AAA' && $j = 'BBB') {
    var_dump($i, $j);
    sleep(3);
}

输出结果
bool(true)
string(3) "BBB"

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

在写一个后台监听程序的时候使用了while循环,于是纠结了一下`while`中的条件表达式
  1. 针对上面的代码我预想的是输出AAA BBB 但是为何是是true BBB

  2. 看这段代码

    while($ret = 100) {
        var_dump($ret) // output:100
    }

    在这里括号里的条件表达式$ret=100是怎样得出结果为true或者是false的。 我想的是先把100这个值赋值给$ret变量,然后在对$ret进行布尔值转换取结果。

    希望大家帮忙解惑。谢谢了。

if (($i = 'AAA') && ($j = 'BBB')) {
    var_dump($i, $j);
}

注意 && 优先级

运算符逻辑问题,价格括号就欧克了

while (($i = 'AAA') && ( $j = 'BBB')) {


    var_dump($i, $j);// true bbbbb
    sleep(3);
}

  1. 逗号运算符导致输出bbb, V=1,2此时,v为2
    2.死循环,。 转换成boolea可以 ret = ret && true

(看完/读完)这篇文章有何感想! www.qiangui777.com的分享…

钱柜777唯一官网php遍历中文目录出现乱码

( 钱柜777唯一官网 )

遍历windows下的某个目录,将文件目录或文件显示出来。

<?php
ini_set('display_errors', 1);
$dir_handle=opendir("D:\\UPUPW_AP5.5\\temp\\");
//var_dump(mb_detect_order());
while(($readdir=readdir($dir_handle))!=false)
{
    $newchar=mb_convert_encoding($readdir,"gb2312","UTF-8");
    $char=iconv("UTF-8","gb2312",$readdir);
    echo $readdir."<br/>";

}
closedir($dir_handle);
?>

用了mb_convert_encoding和iconv函数编码转换都不行,php文件编码是UTF-8。

这两个函数,转过来转过去,不是原来那个编码吗


function listDir($dir){
    $arr = [];
    foreach (glob($dir.'*') as $v) {
        $arr[] = mb_convert_encoding($v, 'utf-8', 'gbk'); 
        if(is_dir($v)){
            $arr = array_merge($arr, listDir($v));
        }
    }
    return $arr;
}
print_r(listDir('D:\\UPUPW_AP5.5\\temp\\'));

(看完/读完)这篇文章有何感想! 钱柜777唯一官网的分享…

www.qiangui777.com聊聊APP接口版本 开发和维护

( www.qiangui777.com )

目前的APP接口设计采用的是类似 这篇文章中的设计方案进行的。传送门,当然本站也有类似的提问 点我点我~

目前我们的方案是,小功能升级采用在原有的接口增加字段。伤筋动骨的功能,COPY上一个版本的代码,增加版本号。但是这样需要同时维护至少三个版本的代码。感觉好悲伤,SO大家来聊聊你们是如何做APP接口版本控制的。以及接口的监控和报警等等~

以前是restful api流行
就是为了避免你说的维护三个版本的代码出现了些新技术

graphQL
relay

统一套代码管理各种版本的api,想从api获取什么数据就发送什么请求,然后服务器给你返回你想要的,题主可以自己去搜看一下,不过个人感觉这些不适合我这种学生的小项目

restful
小改加字段
大改重新定义接口版本

用的laravel框架,采用了一个很牛逼的第三方库dingo api
路由版本控制,参数验证,前缀与子域名 等功能

(看完/读完)这篇文章有何感想! www.qiangui777.com的分享…

钱柜777唯一官网如何使用nginx或php将请求转发到另一个地址

( 钱柜777唯一官网 )

我有两台web服务器,想实现这样一个功能:

  1. 用户请求服务器A(http://aaa);

  2. 服务器A 收到请求 取到用户请求的数据,请求服务器B(http://bbb);

  3. 服务器B 返回数据给服务器A;

  4. 服务器A 返回数据给用户。

请问服务器A需要做什么设置才能完成这种需求。

如果不行的话,能不能用php实现,有没有demo?

server {
    listen  80;
    server_name  aaa;

    location / {
        proxy_pass http://bbb;
    }
}

举个PHP栗子。
aaa.com page1.php
比如发送一个get请求


<?php
$data = file_get_contents('http://bbb.com/page2.php?id=2&key=kkk');
print_r($data);
?>

bbb.com page2.php


<?php
$id = $_GET['id];
echo json_encode(array('status'=>0,'message'=>$id));
?>

(看完/读完)这篇文章有何感想! 钱柜777唯一官网的分享…