资讯专栏INFORMATION COLUMN

那些 PHP 开发者可能用得上的工具

JowayYoung / 2137人阅读

PHP 函数的 JavaScript 实现
module.exports = function array_sum (array) { // eslint-disable-line camelcase
  //  discuss at: http://locutus.io/php/array_sum/
  // original by: Kevin van Zonneveld (http://kvz.io)
  // bugfixed by: Nate
  // bugfixed by: Gilbert
  // improved by: David Pilia (http://www.beteck.it/)
  // improved by: Brett Zamir (http://brett-zamir.me)
  //   example 1: array_sum([4, 9, 182.6])
  //   returns 1: 195.6
  //   example 2: var $total = []
  //   example 2: var $index = 0.1
  //   example 2: for (var $y = 0; $y < 12; $y++){ $total[$y] = $y + $index }
  //   example 2: array_sum($total)
  //   returns 2: 67.2
  var key
  var sum = 0
  // input sanitation
  if (typeof array !== "object") {
    return null
  }
  for (key in array) {
    if (!isNaN(parseFloat(array[key]))) {
      sum += parseFloat(array[key])
    }
  }
  return sum
}
Underscore.js 的 PHP 版
function __($item=null) {
  $__ = new __;
  if(func_num_args() > 0) $__->_wrapped = $item;
  return $__;
}
自动生成 gitignore 文件
https://www.gitignore.io/api/laravel
# Created by https://www.gitignore.io/api/laravel

### Laravel ###
vendor/
node_modules/
npm-debug.log

# Laravel 4 specific
bootstrap/compiled.php
app/storage/

# Laravel 5 & Lumen specific
public/storage
public/hot
storage/*.key
.env.*.php
.env.php
.env
Homestead.yaml
Homestead.json

# Rocketeer PHP task runner and deployment package. https://github.com/rocketeers/rocketeer
.rocketeer/

# End of https://www.gitignore.io/api/laravel
爬虫组件
composer global require slince/spider *@dev
use SlinceSpiderSpider;

$spider = new Spider();
$spider->run("http://www.baidu.com");
简单、 灵活、强大的 PHP 采集工具
use QLQueryList;
//采集某页面所有的图片
$data = QueryList::Query("http://cms.querylist.cc/bizhi/453.html",array(
    //采集规则库
    //"规则名" => array("jQuery选择器","要采集的属性"),
    "image" => array("img","src")
    ))->data;
//打印结果
print_r($data);

//采集某页面所有的超链接
//可以先手动获取要采集的页面源码
$html = file_get_contents("http://cms.querylist.cc/google/list_1.html");
//然后可以把页面源码或者HTML片段传给QueryList
$data = QueryList::Query($html,array(
    "link" => array("a","href")
    ))->data;
//打印结果
print_r($data);
在线测试采集并查看采集结果 http://querylist.cc/page-Querytest.html
在线测试代码

$array=[
    ["name"=>"张三","age"=>"23"],
    ["name"=>"李四","age"=>"64"],
    ["name"=>"王五","age"=>"55"],
    ["name"=>"赵六","age"=>"66"],
    ["name"=>"孙七","age"=>"17"],
];
$sort = array(
    "direction" => "SORT_ASC", //排序顺序标志 SORT_DESC 降序;SORT_ASC 升序
    "field"     => "age",       //排序字段
);
$arrSort = array();
foreach($array as $uniqid => $row){
    foreach($row AS $key=>$value){
        $arrSort[$key][$uniqid] = $value;
    }
}
array_multisort($arrSort[$sort["field"]], constant($sort["direction"]), $array);
print_r($array);
中文转拼音工具
//https://hellogithub.com/category/PHP%20%E9%A1%B9%E7%9B%AE/
use OvertruePinyinPinyin;
$pinyin = new Pinyin();
$pinyin->convert("带着希望去旅行,比到达终点更美好");
// ["dai", "zhe", "xi", "wang", "qu", "lv", "xing", "bi", "dao", "da", "zhong", "dian", "geng", "mei", "hao"]

$pinyin->convert("带着希望去旅行,比到达终点更美好", PINYIN_UNICODE);
// ["dài","zhe","xī","wàng","qù","lǚ","xíng","bǐ","dào","dá","zhōng","diǎn","gèng","měi","hǎo"]

$pinyin->convert("带着希望去旅行,比到达终点更美好", PINYIN_ASCII);
//["dai4","zhe","xi1","wang4","qu4","lv3","xing2","bi3","dao4","da2","zhong1","dian3","geng4","mei3","hao3"]
美化 curl
$ git clone https://github.com/talhasch/php-httpstat
$ cd php-httpstat
$ cp httpstat.php /usr/local/bin/httpstat
$ chmod +x /usr/local/bin/httpstat
$ httpstat http://www.google.com
在线正则表达式测试

在线测试 redis

在线练习 git

检测 PHP 应用的代码复杂度
composer global require "phploc/phploc=*"
$ phploc src
phploc 4.0.0 by Sebastian Bergmann.

Directories                                          3
Files                                               10

Size
  Lines of Code (LOC)                             1882
  Comment Lines of Code (CLOC)                     255 (13.55%)
  Non-Comment Lines of Code (NCLOC)               1627 (86.45%)
  Logical Lines of Code (LLOC)                     377 (20.03%)
    Classes                                        351 (93.10%)
      Average Class Length                          35
        Minimum Class Length                         0
        Maximum Class Length                       172
      Average Method Length                          2
        Minimum Method Length                        1
        Maximum Method Length                      117
    Functions                                        0 (0.00%)
      Average Function Length                        0
    Not in classes or functions                     26 (6.90%)
php http 请求工具
$response = Zttp::withHeaders(["Fancy" => "Pants"])->post($url, [
    "foo" => "bar",
    "baz" => "qux",
]);

$response->json();
// => [
//  "whatever" => "was returned",
// ];
任务管理
composer global require consolidation/robo
class RoboFile {
/**
 * Each public method is a command in runner
 * parameters are arguments in console
 *
 * use "./robo test" to run tests on a project
 */
function test($pathToSelenium = "~/selenium.jar")
{
    // starts PHP server in background
    $this->taskPhpServer(8000)
        ->background()
        ->dir("web")
        ->run();

    // launches Selenium server
    $this->taskExec("java -jar ".$pathToSelenium)
        ->background()
        ->run();

    // runs PHPUnit tests
    $this->taskPHPUnit()
        ->run();
}
phpstorm 技巧

php ai
composer require php-ai/php-ml
require_once "vendor/autoload.php";

use PhpmlClassificationKNearestNeighbors;

$samples = [[1, 3], [1, 4], [2, 4], [3, 1], [4, 1], [4, 2]];
$labels = ["a", "a", "a", "b", "b", "b"];

$classifier = new KNearestNeighbors();
$classifier->train($samples, $labels);

echo $classifier->predict([3, 2]);
// return "b"
PHP driver for FFMpeg
$ffmpeg = FFMpegFFMpeg::create();
$video = $ffmpeg->open("video.mpg");
$video
    ->filters()
    ->resize(new FFMpegCoordinateDimension(320, 240))
    ->synchronize();
$video
    ->frame(FFMpegCoordinateTimeCode::fromSeconds(10))
    ->save("frame.jpg");
$video
    ->save(new FFMpegFormatVideoX264(), "export-x264.mp4")
    ->save(new FFMpegFormatVideoWMV(), "export-wmv.wmv")
    ->save(new FFMpegFormatVideoWebM(), "export-webm.webm");
编码格式化工具
//http://cs.sensiolabs.org/  composer  global require fabpot/php-cs-fixer
//wget http://get.sensiolabs.org/php-cs-fixer.phar -O php-cs-fixer
curl http://get.sensiolabs.org/php-cs-fixer.phar -o php-cs-fixer
sudo chmod a+x php-cs-fixer
sudo mv php-cs-fixer /usr/local/bin/php-cs-fixer
# 格式化目录 如果是当前目录的话可以省略目录
php-cs-fixer fix /path/to/dir
# 格式化文件
php-cs-fixer.phar fix /path/to/file
//cat foo.php | php-cs-fixer fix --diff -
#https://housanpai.com/articles/10
php medoo
composer require catfan/Medoo
// 如果你通过 composer 安装, 只需在项目的开始部分加上此代码即可自动加载。
require "vendor/autoload.php";
 
// 或者你是下载 medoo.php 并放置到项目目录中,require 即可。
require  "medoo.php";
 
$database = new medoo([
    // 必须的
    "database_type" => "mysql",
    "database_name" => "name",
    "server" => "localhost",
    "username" => "your_username",
    "password" => "your_password",
    "charset" => "utf8",
 
    // [可选]
    "port" => 3306,
 
    // [可选] 表名前缀
    "prefix" => "PREFIX_",
 
    // [可选] 连接的驱动选项,请阅读 http://www.php.net/manual/en/pdo.setattribute.php
    "option" => [
        PDO::ATTR_CASE => PDO::CASE_NATURAL
    ]
]);
 
$database->insert("account", [
    "user_name" => "foo",
    "email" => "foo@bar.com"
]);
在线文档分享工具

composer create-project showdoc/showdoc

php的ngrok客户端 比对两个数据库的表结构,并自动修正
git clone https://github.com/exinnet/mysqldiff.git
cd mysqldiff
vi config.php # config mysql connection info

php mysqldiff.php
cron

file_get_contents("https://hchk.io/e9ad1415-566c-40c9-9c97-a298d727ab68");

语法检测
composer require overtrue/phplint -vvv
use OvertruePHPLintLinter;

$path = __DIR__ ."/app";
$exclude = ["vendor"];
$extensions = ["php"];

$linter = new Linter($path, $exclude, $extensions);

// get errors
$errors = $linter->lint();

//
// [
//    "/path/to/foo.php" => [
//          "error" => "unexpected "$key" (T_VARIABLE)",
//          "line" => 168,
//          "file" => "/path/to/foo.php",
//      ],
//    "/path/to/bar.php" => [
//          "error" => "unexpected "class" (T_CLASS), expecting "," or ";"",
//          "line" => 28,
//          "file" => "/path/to/bar.php",
//      ],
// ]
生成Material Design风格头像
// composer 
require(__DIR__ . "/vendor/autoload.php");
use MdMDAvatars;

$Avatar = new MDAvatars("X", 512);
$Avatar->Output2Browser();
$Avatar->Save("./avatars/Avatar256.png", 256);
使用screw plus来保护php代码安全 一个最精简的php多进程控制库
$sf = new SimpleFork(2, "my-process"); // 2代表子进程数, "my-process"是进程的名字

$sf->master(function ($sf) {
    // 主进程的方法请包裹在master里
    while ($sf->loop(100)) { // 100为等待的毫秒数
        $sf->submit("http://www.google.cn/", function ($data) { // 使用submit方法将其提交到一个空闲的进程,如果没有空闲的,系统会自动等待
            echo $data;
        });
    }
})->slave(function ($url, $sf) {
    $sf->log("fetch %s", $url); // 使用内置的log方法,子进程的log也会被打印到主进程里
    return http_request($url);  // 直接返回数据,主进程将在回调中收到
});
A PHP MySQL PDO class similar to the the Python MySQLdb
$DB->query("SELECT * FROM fruit WHERE name=".$_GET["name"]);

$DB->query("SELECT * FROM fruit WHERE name=? and color=?",array("apple","red"));
$DB->query("SELECT * FROM fruit WHERE name=:name and color=:color",array("name"=>"apple","color"=>"red"));
$DB->query("SELECT * FROM fruit WHERE name IN (?)",array("apple","banana"));
图片处理
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_URL, "https://avatars0.githubusercontent.com/u/5785188?v=3&s=460");
$response =  curl_exec($ch);
curl_close($ch);

$UploadAvatar = new ImageResize("String", $response);
$Result = $UploadAvatar->Resize(256, "upload/avatar/large.png", 80);
Linux 图形化性能监视器 编写PHP代码片段终极机器人

PHP 代码转 Python
def substr (self, s, start, length = None):
        """Returns the portion of string specified by the start and length 
        parameters.
        """
       if len(s) >= start:
            if start > 0:
                return False
            else:
                return s[start:]
        if not length:
            return s[start:]
        elif length > 0:
            return s[start:start + length]
        else:
            return s[start:length]
php部署工具
curl -LO https://deployer.org/deployer.phar
mv deployer.phar /usr/local/bin/dep
chmod +x /usr/local/bin/dep
composer require deployer/deployer

公众号:苏生不惑

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/23273.html

相关文章

  • 前端学习路线

    摘要:具体来说,包管理器就是可以通过命令行,帮助你把外部库和插件放到你的项目里面并在之后进行版本升级,这样就不用手工复制和更新库。现在有的包管理器主要是和。 一、基础 1、学习HTML基础 HTML给你的网页赋予了结构。它就像是人的骨架那样让你保持站立。首先你需要去学习语法以及它必须提供的一切。你的学习应该聚焦在下面这些东西上: 学习HTML基础,了解如何编写语义HTML 理解如何把网页分...

    FullStackDeveloper 评论0 收藏0
  • 前端学习路线

    摘要:具体来说,包管理器就是可以通过命令行,帮助你把外部库和插件放到你的项目里面并在之后进行版本升级,这样就不用手工复制和更新库。现在有的包管理器主要是和。 一、基础 1、学习HTML基础 HTML给你的网页赋予了结构。它就像是人的骨架那样让你保持站立。首先你需要去学习语法以及它必须提供的一切。你的学习应该聚焦在下面这些东西上: 学习HTML基础,了解如何编写语义HTML 理解如何把网页分...

    20171112 评论0 收藏0
  • 用什么PHP框架最好?框架?还不如用开源系统吧

    摘要:最近这六年来,一直使用开源系统来做项目,如等,虽然也有接触过主流的框架,不过并不多。互联网快速迭代我是互联网比较早的用户了,我学的时候还没有所谓的框架,所以那时候开发出一个好用的框架无疑是提高生产力最佳的方案。 最近这六年来,一直使用PHP开源系统来做项目,如drupal, joomla, wordpress, magento等,虽然也有接触过主流的框架,不过并不多。也许我会有一些偏见...

    Steven 评论0 收藏0
  • 「前端早读君006」移动开发必备:那些玩转H5小技巧

    摘要:今日励志语录有志者自有千计万计,无志者只感千难万难。三动画技术越来越不陌生,使用门槛也渐渐降低,而且动画还可以使用控制。扫一扫查看效果打开微扫一扫关注早读君,每天早晨为你推送前端知识,度过挤地铁坐公交的时光 今日励志语录有志者自有千计万计,无志者只感千难万难。 文章原出处:腾讯ISUX 开始阅读之前你可以先扫一扫体验demoshowImg(https://segmentfault.co...

    LittleLiByte 评论0 收藏0

发表评论

0条评论

JowayYoung

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<