分类: PHP

  • PHP HTML解析器

    PHPHtmlParser是一款简单灵活的HTML解析器,允许您使用任何CSS选择器来选取标签,类似于jQuery的方式。其目标是为那些需要快速简便地抓取HTML(无论是否合法)的工具提供帮助!

    安装 通过Composer安装最新版本。

    $ composer require paquettg/php-html-parser

    本包可在Packagist上找到,并推荐通过Composer加载。我们支持PHP 7.2、7.3和7.4。

    基本用法 在测试目录中,您可以找到关于如何使用DOM解析器及其各部分(很可能您永远不会直接触碰)的许多示例。这些测试使用PHPUnit编写,非常简短,每个只有几行,是开始学习的好地方。即便如此,我仍会展示一些如何使用该包的基本例子。以下是一个非常简单的使用示例:

    // 假设您已通过Composer安装:

    require "vendor/autoload.php";
    use PHPHtmlParser\Dom;
    
    $dom = new Dom;
    $dom->loadStr('<div class="all"><p>嘿,兄弟,<a href="https://gitcode.com/gh_mirrors/ph/php-html-parser/blob/master/google.com">点击这里</a>
    <br /> :)</p></div>');
    $a = $dom->find('a')[0];
    echo $a->text; // 输出 "点击这里"

    这段代码将输出“点击这里”。简单吧?从DOM获取相同结果的方式有很多种,比如$dom->getElementsByTagName(‘a’)[0]或$dom->find(‘a’, 0),更多用法可参考测试案例或源码本身。

    支持PHP Html Parser的资金赞助 获取受支持的Monolog,并通过Tidelift订阅资助该项目。

    Tidelift为您的应用所依赖的开源依赖项提供了商业级别的支持与维护。节省时间,降低风险,改善代码健康状况,同时支持您实际使用的依赖项的维护者。

    加载文件 您也可以无缝地将文件加载到DOM中而不是字符串,这更方便,也是我认为大多数开发者加载HTML的方式。以下示例源自我们的测试,使用了其中的"big.html"文件。

    // 假设您已通过Composer安装:
    require "vendor/autoload.php";
    use PHPHtmlParser\Dom;
    
    $dom = new Dom;
    $dom->loadFromFile('tests/data/big.html');
    $contents = $dom->find('.content-border');
    echo count($contents); // 输出 10
    
    foreach ($contents as $content) {
        // 获取类属性
        $class = $content->getAttribute('class');
    
        // 对HTML进行处理
        $html = $content->innerHtml;
    
        // 或进一步细化查找
        $child   = $content->firstChild();
        $sibling = $child->nextSibling();
    }

    此例从"big.html"(一个真实的在线页面)加载HTML,获取所有.content-border类以进行处理,并展示了可以对节点执行的一些操作,但并非节点可用方法的完整列表。

    加载URL 加载URL的方式与从文件加载HTML非常相似。

    // 假设您已通过Composer安装:
    require "vendor/autoload.php";
    use PHPHtmlParser\Dom;
    
    $dom = new Dom;
    $dom->loadFromUrl('http://google.com');
    $html = $dom->outerHtml;

    // 或者

    $dom->loadFromUrl('http://google.com');
    $html = $dom->outerHtml; // 结果与第一个示例相同
    默认情况下,loadFromUrl使用\Psr\Http\Client\ClientInterface的一个实现来执行HTTP请求,并使用一个默认的\Psr\Http\Message\RequestInterface实现来构造请求体。您可以轻松实现自己的客户端或请求版本,以便在使用loadFromUrl时使用自定义的HTTP连接。
    
    // 假设您已通过Composer安装:
    require "vendor/autoload.php";
    use PHPHtmlParser\Dom;
    use App\Services\MyClient;
    
    $dom = new Dom;
    $dom->loadFromUrl('http://google.com', null, new MyClient());
    $html = $dom->outerHtml;
    只要客户端对象正确实现了接口,它就会使用那个对象来获取URL的内容。

    加载字符串 直接加载字符串也非常简单。

    // 假设您已通过Composer安装:

    require "vendor/autoload.php";
    use PHPHtmlParser\Dom;
    
    $dom = new Dom;
    $dom->loadStr('
    <html>字符串</html>');
    $html = $dom->outerHtml;

    配置选项 您还可以设置影响解析引擎行为的解析选项。可以通过Dom对象的setOptions方法设置全局选项数组,或者将选项作为load方法的额外(可选)参数添加来设定实例特定的选项。

    // 假设您已通过Composer安装:
    require "vendor/autoload.php";
    use PHPHtmlParser\Dom;
    use PHPHtmlParser\Options;
    
    $dom = new Dom;
    $dom->setOptions(
        // 这被设置为全局选项级别。
        (new Options())
            ->setStrict(true)
    );
    
    $dom->loadFromUrl('http://google.com', 
        (new Options())->setWhitespaceTextNode(false) // 只在此加载中适用。
    );
    
    $dom->loadFromUrl('http://gmail.com'); // 将不会设置whitespaceTextNode为false。

    目前,我们支持12个配置选项。

    严格模式 默认关闭,当发现HTML不严格合规(所有标签都必须有闭合标签,没有无值属性等)时抛出StrictException。

    空白文本节点 默认开启,告诉解析器保存即使是空内容(仅空白字符)的文本节点。设置为假则忽略文档中的所有仅空白文本节点。

    强制编码 默认为空,用于指定读取内容和返回内容时使用的字符集。若设为null,则尝试从给定字符串的内容中推断编码。

    其余选项还包括清理输入阶段控制(cleanupInput)、移除脚本和样式标签、保留换行符、去除双倍空格、移除Smarty脚本以及HTML特殊字符解码等功能,它们各自都有详细的描述和默认值,使用户能根据需求定制解析过程。

    静态外观(Static Facade) 您还可以为 Dom 对象安装一个静态外观。

    PHPHtmlParser\StaticDom::mount();
    
    Dom::loadFromFile('tests/big.html');
    $objects = Dom::find('.content-border');

    上述 PHP 代码块与第一个示例执行相同的操作,但使用了静态外观,该外观支持在 Dom 对象中找到的所有公共方法。

    修改 DOM 您可以随时修改通过任何加载方法创建的 DOM。要更改节点的属性,只需调用 setAttribute 方法。

    use PHPHtmlParser\Dom;
    
    $dom = new Dom;
    $dom->loadStr('<div class="all"><p>Hey bro, <a href="https://gitcode.com/gh_mirrors/ph/php-html-parser/blob/master/google.com">click here</a>
    <br /> :)</p></div>');
    $a = $dom->find('a')[0];
    $a->setAttribute('class', 'foo');
    echo $a->getAttribute('class'); // "foo"

    您还可以直接获取 PHPHtmlParser\Dom\Tag 类并按需操作它。

    use PHPHtmlParser\Dom;
    
    $dom = new Dom;
    $dom->loadStr('<div class="all"><p>Hey bro, <a href="https://gitcode.com/gh_mirrors/ph/php-html-parser/blob/master/google.com">click here</a>
    <br /> :)</p></div>');
    /** @var Dom\Node\AbstractNode $a */
    $a   = $dom->find('a')[0];
    $tag = $a->getTag();
    $tag->setAttribute('class', 'foo');
    echo $a->getAttribute('class'); // "foo"

    也可以从树中删除节点。只需对任何节点调用 delete 方法即可将其从树中移除。重要的是要注意,在从 DOM 中删除节点后应将其取消设置,否则它仍会占用内存。

    use PHPHtmlParser\Dom;
    
    $dom = new Dom;
    $dom->loadStr('<div class="all"><p>Hey bro, <a href="https://gitcode.com/gh_mirrors/ph/php-html-parser/blob/master/google.com">click here</a>
    <br /> :)</p></div>');
    /** @var Dom\Node\AbstractNode $a */
    $a   = $dom->find('a')[0];
    $a->delete();
    unset($a);
    echo $dom; // '<div class="all"><p>Hey bro, <br /> :)</p></div>';

    您可以轻松地修改 TextNode 对象的文本。请注意,如果您设置了编码,新文本将使用现有编码进行编码。

    use PHPHtmlParser\Dom;
    
    $dom = new Dom;
    $dom->loadStr('<div class="all"><p>Hey bro, <a href="https://gitcode.com/gh_mirrors/ph/php-html-parser/blob/master/google.com">click here</a>
    <br /> :)</p></div>');
    /** @var Dom\Node\InnerNode $a */
    $a   = $dom->find('a')[0];
    $a->firstChild()->setText('biz baz');
    echo $dom; // '<div class="all"><p>Hey bro, <a href="https://gitcode.com/gh_mirrors/ph/php-html-parser/blob/master/google.com">biz baz</a>
    <br /> :)</p></div>'
  • 立即下载使用 swoole-cli

    1. swoole 版本由 v5.1.4 升级为 v5.1.5 , swoole v5.1.4 info
    2. 修复发版时 swoole 版本错误
    3. 修复 macos 环境 mongodb 扩展构建错误
    4. 修复 libxml2, libxslt URL
    5. 删除 docker build –progress=plain 参数,非通用参数,部分 docker 版本不支持
    6. 为 make.sh 添加可执行属性
    7. 设置 加载 php.ini 默认目录(/usr/local/swoole-cli/etc/php.ini)
    8. 优化同步 PHP 源码脚本
    9. 优化macos 环境下构建流程
    
    curl -fSL https://github.com/swoole/swoole-cli/blob/main/setup-swoole-cli-runtime.sh?raw=true | bash
    
    # 来自 https://www.swoole.com/download
    curl -fSL https://github.com/swoole/swoole-cli/blob/main/setup-swoole-cli-runtime.sh?raw=true | bash -s -- --mirror china
    
  • 正则表达式 – 语法

    正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。模式描述在搜索文本时要匹配的一个或多个字符串。

    1.正则表达式基本语法

    两个特殊的符号’^’和’$’。他们的作用是分别指出一个字符串的开始和结束。例子如下:

    "^The":表示所有以"The"开始的字符串("There","The cat"等); "of despair$":表示所以以"of despair"结尾的字符串; "^abc$":表示开始和结尾都是"abc"的字符串——呵呵,只有"abc"自己了; "notice":表示任何包含"notice"的字符串。

    象最后那个例子,如果你不使用两个特殊字符,你就在表示要查找的串在被查找串的任意部分——你并 不把它定位在某一个顶端。

    其它还有’*’,’+’和’?’这三个符号,表示一个或一序列字符重复出现的次数。它们分别表示“没有或 更多”,“一次或更多”还有“没有或一次”。下面是几个例子:

    "ab*":表示一个字符串有一个a后面跟着零个或若干个b。("a", "ab", "abbb",……); "ab+":表示一个字符串有一个a后面跟着至少一个b或者更多; "ab?":表示一个字符串有一个a后面跟着零个或者一个b; "a?b+$":表示在字符串的末尾有零个或一个a跟着一个或几个b。

    你也可以使用范围,用大括号括起,用以表示重复次数的范围。

    "ab{2}":表示一个字符串有一个a跟着2个b("abb"); "ab{2,}":表示一个字符串有一个a跟着至少2个b; "ab{3,5}":表示一个字符串有一个a跟着3到5个b。

    请注意,你必须指定范围的下限(如:"{0,2}"而不是"{,2}")。还有,你可能注意到了,’*’,’+’和 ‘?’相当于"{0,}","{1,}"和"{0,1}"。 还有一个’¦’,表示“或”操作:

    "hi¦hello":表示一个字符串里有"hi"或者"hello"; "(b¦cd)ef":表示"bef"或"cdef"; "(a¦b)*c":表示一串"a""b"混合的字符串后面跟一个"c";

    ‘.’可以替代任何字符:

    "a.[0-9]":表示一个字符串有一个"a"后面跟着一个任意字符和一个数字; "^.{3}$":表示有任意三个字符的字符串(长度为3个字符);

    方括号表示某些字符允许在一个字符串中的某一特定位置出现:

    "[ab]":表示一个字符串有一个"a"或"b"(相当于"a¦b"); "[a-d]":表示一个字符串包含小写的’a’到’d’中的一个(相当于"a¦b¦c¦d"或者"[abcd]"); "^[a-zA-Z]":表示一个以字母开头的字符串; "[0-9]%":表示一个百分号前有一位的数字; ",[a-zA-Z0-9]$":表示一个字符串以一个逗号后面跟着一个字母或数字结束。

    你也可以在方括号里用’^’表示不希望出现的字符,’^’应在方括号里的第一位。(如:"%[^a-zA-Z]%"表 示两个百分号中不应该出现字母)。

    为了逐字表达,你必须在"^.$()¦*+?{\"这些字符前加上转移字符’\’。

    请注意在方括号中,不需要转义字符。

    2.正则表达式验证控制文本框的输入字符类型

    1.只能输入数字和英文的:

    <input onkeyup="value=value.replace(/[\W]/g,”) " onbeforepaste="clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\d]/g,”))" ID="Text1" NAME="Text1">

    2.只能输入数字的:

    <input onkeyup="value=value.replace(/[^\d]/g,”) " onbeforepaste="clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\d]/g,”))" ID="Text2" NAME="Text2">

    3.只能输入全角的:

    <input onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,”)" onbeforepaste="clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\uFF00-\uFFFF]/g,”))" ID="Text3" NAME="Text3">

    4.只能输入汉字的:

    <input onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,”)" onbeforepaste="clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\u4E00-\u9FA5]/g,”))" ID="Text4" NAME="Text4">

    3.正则表达式的应用实例通俗说明


    //校验是否全由数字组成

    /^[0-9]{1,20}$/

    ^ 表示打头的字符要匹配紧跟^后面的规则

    $ 表示打头的字符要匹配紧靠$前面的规则

    [ ] 中的内容是可选字符集

    [0-9] 表示要求字符范围在0-9之间

    {1,20}表示数字字符串长度合法为1到20,即为[0-9]中的字符出现次数的范围是1到20次。 /^ 和 $/成对使用应该是表示要求整个字符串完全匹配定义的规则,而不是只匹配字符串中的一个子串。


    //校验登录名:只能输入5-20个以字母开头、可带数字、“_”、“.”的字串

    /^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}$/

    ^[a-zA-Z]{1} 表示第一个字符要求是字母。

    ([a-zA-Z0-9]|[.]){4,19} 表示从第二位开始(因为它紧跟在上个表达式后面)的一个长度为4到9位的字符串,它要求是由大小写字母、数字或者特殊字符集[.]组成。


    //校验用户姓名:只能输入1-30个以字母开头的字串

    /^[a-zA-Z]{1,30}$/


    //校验密码:只能输入6-20个字母、数字、下划线

    /^(\w){6,20}$/

    \w:用于匹配字母,数字或下划线字符


    //校验普通电话、传真号码:可以“+”或数字开头,可含有“-” 和 “ ”

    /^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/

    \d:用于匹配从0到9的数字;

    “?”元字符规定其前导对象必须在目标对象中连续出现零次或一次

    可以匹配的字符串如:+123 -999 999 ; +123-999 999 ;123 999 999 ;+123 999999等


    //校验URL

    /^http[s]{0,1}:\/\/.+$/ 或 /^http[s]{0,1}:\/\/.{1,n}$/ (表示url串的长度为length(“https://”) + n )

    \ / :表示字符“/”。

    . 表示所有字符的集

    • 等同于{1,},就是1到正无穷吧。
  • 如何使用AWS SDK for PHP操作Minio Server

    1. 前提条件

    这里下载并安装Minio Server。

    2. 安装

    AWS SDK for PHP官方文档下载将安装aws-sdk-php

    3. 使用GetObject和PutObject

    下面示例描述的是如何使用aws-sdk-php对Minio Server进行putObject和getObject操作。请将 example.php文件中的endpoint,keysecretBucket修改为你的本地配置。注意,我们将use_path_style_endpoint设置为true以使用AWS SDK for PHP来操作Minio。了解更多,请参考AWS SDK for PHP

    1. <? php
    2. // 使用Composer autoloader引入SDK
    3. date_default_timezone_set ( 'America/Los_Angeles' );
    4. require 'vendor/autoload.php' ;
    5. $s3 = new Aws \S 3 \S 3Client ([
    6. 'version' => 'latest' ,
    7. 'region' => 'us-east-1' ,
    8. 'endpoint' => 'http://localhost:9000' ,
    9. 'use_path_style_endpoint' => true ,
    10. 'credentials' => [
    11. 'key' => 'YOUR-ACCESSKEYID' ,
    12. 'secret' => 'YOUR-SECRETACCESSKEY' ,
    13. ],
    14. ]);
    15. // 发送PutObject请求并获得result对象
    16. $insert = $s3 -> putObject ([
    17. 'Bucket' => 'testbucket' ,
    18. 'Key' => 'testkey' ,
    19. 'Body' => 'Hello from Minio!!'
    20. ]);
    21. // 下载文件的内容
    22. $retrive = $s3 -> getObject ([
    23. 'Bucket' => 'testbucket' ,
    24. 'Key' => 'testkey' ,
    25. 'SaveAs' => 'testkey_local'
    26. ]);
    27. // 通过索引到结果对象来打印结果的body。
    28. echo $retrive [ 'Body' ];

    修改之后,运行程序

    1. php example . php
    2. Hello from Minio !!

    4. 生成pre-signed URL

    1. <? php
    2. // 从client中获得一个commad对象
    3. $command = $s3 -> getCommand ( 'GetObject' , [
    4. 'Bucket' => 'testbucket' ,
    5. 'Key' => 'testkey'
    6. ]);
    7. // 获得一个10分钟有效期的pre-signed URL
    8. $presignedRequest = $s3 -> createPresignedRequest ( $command , '+10 minutes' );
    9. // 获得presigned-url
    10. $presignedUrl = ( string ) $presignedRequest -> getUri ();

    5. 获取plain URL

    获取一个plain URL,你需要将你的object/bucket权限设为public。注意,你不会获得带有后面这些信息的URL, X-Amz-Algorithm=[…]&X-Amz-Credential=[…]&X-Amz-Date=[…]&X-Amz-Expires=[…]&X-Amz-SignedHeaders=[…]&X-Amz-Signature=[…]

    1. <? php
    2. $plainUrl = $s3 -> getObjectUrl ( 'testbucket' , 'testkey' );

    6. 设置存储桶策略

    1. <? php
    2. $bucket = 'testbucket' ;
    3. // 该策略设置存储桶为只读
    4. $policyReadOnly = '{
    5. "Version": "2012-10-17",
    6. "Statement": [
    7. {
    8. "Action": [
    9. "s3:GetBucketLocation",
    10. "s3:ListBucket"
    11. ],
    12. "Effect": "Allow",
    13. "Principal": {
    14. "AWS": [
    15. "*"
    16. ]
    17. },
    18. "Resource": [
    19. "arn :aws :s3:::%s"
    20. ],
    21. "Sid": ""
    22. },
    23. {
    24. "Action": [
    25. "s3:GetObject"
    26. ],
    27. "Effect": "Allow",
    28. "Principal": {
    29. "AWS": [
    30. "*"
    31. ]
    32. },
    33. "Resource": [
    34. "arn :aws :s3:::%s /*"
    35. ],
    36. "Sid": ""
    37. }
    38. ]
    39. }
    40. ' ;
    41. // 如果你想将文件放到指定目录,你只需要修改'arn:aws:s3:::%s/*'为' arn: aws:s3:::%s/folder/*'
    42. // 创建一个存储桶
    43. $result = $s3 -> createBucket ([
    44. 'Bucket' => $bucket ,
    45. ]);
    46. // 配置策略
    47. $s3 -> putBucketPolicy ([
    48. 'Bucket' => $bucket ,
    49. 'Policy' => sprintf ( $policyReadOnly , $bucket , $bucket ),
    50. ]);
    原文: https://docs.minio.io/cn/how-to-use-aws-sdk-for-php-with-minio-server.html
  • 一键安装PHP swoole 环境

     curl -sS https://gitee.com/houlijiang/common/raw/master/php-install.sh | sh -

    卸载:

    完全卸载删除PHP

    查看全部的PHP软件包,命令:rpm -qa|grep php
    实例如下:

    [root\@xxx\~]
    # rpm -qa|grep php
    php-cli-5.4.16-46.el7.x86\_64
    php-common-5.4.16-46.el7.x86\_64
    php-5.4.16-46.el7.x86\_64
    

    找到PHP的软件包后,我们使用命令:rpm -e 软件包名的方式一个个删除即可完全删除。

    注意:由于某些PHP软件包被其他PHP软件包所依赖,删除顺序不同,回到值无法删除,例如上面的实例中 php-cli-5.4.16-46.el7.x86_64 被其他的PHP软件包所需要,如果先执行命令:rpm -e php-cli-5.4.16-46.el7.x86_64会删除不了,所以执行删除顺序为:

    rpm -e php-5.4.16-46.el7.x86_64
    rpm -e php-cli-5.4.16-46.el7.x86_64
    rmp -e php-common-5.4.16-46.el7.x86_64

    删除完毕后,可以使用命令php -v检查下是否还会返回版本信息,如果没有提示,说明已经删除了。

    综上,先使用命令rpm -qa|grep php检查全部的PHP软件包,然后再使用命令rpm -e 软件包名删除PHP软件包。

  • PHP-Composer包开发、发布流程

    Composer对与分发自己的PHP软件包,方便别人引用来说是很好的一种方式。平时开发中经常会用到Composer来引入三方的优质软件包,例如 Laravel、easywechat等等,如果我们有一些好的想法如果分发出去呢?下面我们就一步步来告诉大家如何实现自己的第一个Composer包。

    初始化项目

    首先创建composer.json文件用于声明包基本信息。

    {
    "name": "jake/dev-package", # 包名,格式为 vendor/package-name vendor用于避免冲突
    "description": "软件包描述",
    "autoload": { # 自动载入规范
    "psr-4": {
    "Jake\Package\": "src"
    }
    }
    }

    配置好之后就可以在src目录编写项目逻辑,这里我们声明了自动载入符合psr-4规范。

    本地引用软件包

    在为上传到仓库之前,我们可以使用本地路径来引入

    {
        "name": "jake/application",
    
        ...
    
        "repositories": {
          "dev-package": {
            "type": "path",
            "url": "relative/or/absolute/path/to/my/dev-package",
            "options": {
              "symlink": true
            }
          }
        }
    }

    配置中的“type”: “path” 表示引入的是一个本地仓库,url定义了包的路径,路径可以使用相对路径或绝对路径。

    虽然设置了type和url后就可以开发了,但是composer会复制包的代码到vendor目录,而且每次包发生变更都要执行composer update

    为了避免更新执行update操作,可以通过设置”symlink”: true参数让composer创建一个软链接到包所在目录

    最后一步操作就是使用composer require命令来引入软件包。

    composer require jake/dev-package @dev

    发布到公网

    1、 发布到外网首先需要把代码提交到vcs服务器,并且设置为可公开访问。

    2、 然后注册 packagist 帐号用于发布,用邮箱即可注册。

    3、 登录packagist后可通过 submit 页面发布composer包,发布时需要填写可公开访问的vcs地址。如下图

    点击Check跟着向导走即可完成发布。

    提示
    包名中的vendor不可与他人发布的重复。


    使用

    composer require "kyfjake/lumen-swoole:version"

    版本号规则

    1. dev-branch-name表示使用某一个分支版本,对应vcs中的分支
    2. vxx.xx.xx 表示使用xx.xx.xx版本,对应git中的标签 vxx.xx.xx


    版本号匹配规则见: 官方文档 或 composer包版本命名及限定规则

  • phpStorm 快捷键大全 PhpStorm 常用快捷键和配置

    PhpStorm 是 JetBrains 公司开发的一款商业的 PHP 集成开发工具,PhpStorm可随时帮助用户对其编码进行调整,运行单元测试或者提供可视化debug功能。Phpstrom的一款名为Magicento的插件对快速创建Magento插件十分有用。

    常用快捷键 

    设置快捷键:File -> Settings -> IDE Settings -> Keymap -> 选择“Eclipse” -> 然后“Copy”一份 -> 再个性化设置(自己习惯的)快捷键

    常用快捷键(keymaps:Default情况下)

    Esc键编辑器(从工具窗口)
    F1   帮助 千万别按,很卡!
    F2(Shift+F2)  下/上高亮错误或警告快速定位
    F3   向下查找关键字出现位置
    F4   查找变量来源
    F5   复制文件/文件夹
    F6   移动
    F11  切换书签
    F12  返回到以前的工具窗口

    注意:部分快捷键,必须在没有更改快捷键的情况下才可以使用

    查询快捷键
    CTRL+N   查找类
    CTRL+SHIFT+N  查找文件,打开工程中的文件(类似于eclipse中的ctrl+shift+R),目的是打开当前工程下任意目录的文件
    CTRL+SHIFT+ALT+N 查 找类中的方法或变量(JS)
    CIRL+B   找变量的来源,跳到变量申明处
    CTRL+ALT+B  找所有的子类
    CTRL+SHIFT+B  找变量的 类
    CTRL+G   定位行,跳转行
    CTRL+F   在当前窗口查找文本
    CTRL+SHIFT+F  在指定路径查找文本
    CTRL+R   当前窗口替换文本
    CTRL+SHIFT+R  在指定路径替换文本
    ALT+SHIFT+C  查找修改的文件,最近变更历史
    CTRL+E   最近打开的文件
    F3   查找下一个
    SHIFT+F3  查找上一个
    F4   查找变量来源
    CTRL+ALT+F7  选 中的字符 查找工程出现的地方
    ALT+F7 直接查询选中的字符
    Ctrl+F7  文件中查询选中字符

    自动代码
    ALT+回车  导入包,自动修正
    CTRL+ALT+L  格式化代码
    CTRL+ALT+I  自动缩进
    CTRL+ALT+O  优化导入的类和包
    CTRL+E  最近更改的文件/代码
    CTRL+SHIFT+SPACE 切换窗口
    CTRL+SPACE空格  代码自动完成,代码提示,一般与输入法冲突
    CTRL+ALT+SPACE  类 名或接口名提示(与系统冲突)
    CTRL+P   方法参数提示,显示默认参数
    CTRL+J   自动代码提示,自动补全
    CTRL+ALT+T  把选中的代码放在 TRY{} IF{} ELSE{} 里
    ALT+INSERT  生成代码(如GET,SET方法,构造函数等)

    复制快捷方式
    F5   复制文件/文件夹
    CTRL+C   复制
    CTRL+V   粘贴
    CTRL+X   剪 切,删除行
    CTRL+D   复制行
    Ctrl + Y    删除行插入符号
    CTRL+SHIFT+V  可以复制多个文本 

    高亮
    CTRL+F   选中的文字,高亮显示 上下跳到下一个或者上一个
    F2(Shift+F2) 高亮错误或警告快速定位
    SHIFT+F2  高亮错误或警告快速定位
    CTRL+SHIFT+F7  高亮显示多个关键字. 
    本地历史VCS/SVN
    Alt +反引号(’) 快速弹出VCS菜单
    Ctrl + K         提交项目VCS
    Ctrl + T         更新项目从VCS
    Alt + Shift + C  查看最近发生的变化

    其他快捷方式
    CTRL+Z        倒退(代码后悔)
    CTRL+SHIFT+Z  向前
    CTRL+H        显 示类结构图
    Ctrl +F12      文件结构弹出
    Ctrl+Shift+H  方法的层次结构
    Ctrl+Alt+H    呼叫层次
    CTRL+Q   显示代码注释
    CTRL+W   选中代码,连续按会 有其他效果
    Ctrl+Shift+W   减少当前选择到以前的状态
    CTRL+B   转到声明,快速打开光标处的类或方法说明注释(CTRL + 鼠标单击 也可以)
    CTRL+O   魔术方法
    CTRL+/   注释//取消注释  
    CTRL+SHIFT+/  注释/*…*/
    CTRL+ []   光标移动到 {}[]开头或结尾位置
    CTRL+SHIFT+[]    选中块代码,可以快速复制
    ctrl + ‘-/+’: 可以折叠项目中的任何代码块,包括htm中的任意nodetype=3的元素,function,或对象直接量等等。它不是选中折叠,而是自动识别折叠。

    ctrl + ‘.’: 折叠选中的代码的代码

    Ctrl+Shift+U   选中的字符大小写转换
    ctrl+shift+i      快速查看变量或方法定义源
    CTRL+ALT+F12  资源管理器打开文件夹,跳转至当前文件在磁盘上的位置
    ALT+F1   选择当前文件或菜单中的任何视图工具栏
    SHIFT+ALT+INSERT 竖编辑模式

    CTRL+ALT ←/→  返回上次编辑的位置
    ALT+ ←/→  切换代码视图,标签切换
    ALT+ ↑/↓  在方法间快速移动定位
    alt + ‘7’: 显示当前的类/函数结构。类似于eclipse中的outline的效果。试验了一下,要比aptana的给力一些,但还是不能完全显示prototype下面的方法名。
    SHIFT+F6  重命名,重构 当前区域内变量重命名/重构
    不但可以重命名文件名,而且可以命名函数名,函数名可以搜索引用的文件,还可以重命名局部变量。还可以重命名标签名。在sublime text中有个类似的快捷键:ctrl+shift+d。

    ctrl+shift+enter(智能完善代码 如 if()) 
    ctrl+shift+up/down(移动行、合并选中行,代码选中区域 向上/下移动) 
    CTRL+UP/DOWN  光标跳转到编辑器显示区第一行或最后一行下
    ESC   光标返回编辑框
    SHIFT+ESC  光 标返回编辑框,关闭无用的窗口
    CTRL+F4   关闭当前的编辑器或选项卡

    Ctrl + Alt + V引入变量
    Ctrl + Alt + F 类似引入变量
    Ctrl + Alt + C引入常量

    Ctrl + Tab   键切换选项卡和工具窗口
    Ctrl + Shift + A  查找快捷键
    Alt + #[0-9]      打开相应的工具窗口
    Ctrl + Shift + F12 切换最大化编辑器
    Alt + Shift + F    添加到收藏夹
    Alt + Shift + I    检查当前文件与当前的配置文件
    Ctrl +反引号(`)  快速切换目前的配色/代码方案/快捷键方案/界面方案
    Ctrl + Alt + S     打开设置对话框(与QQ冲突)


    运行
    Alt + Shift + F10  选择的配置和运行
    Alt + Shift + F9   选择配置和调试
    Shift + F10        运行
    Shift + F9调试
    Ctrl + Shift + F10运行范围内配置编辑器
    Ctrl + Shift + X运行命令行


    调试
    F8步过
    F7步入
    Shift + F7智能进入
    Shift + F8步骤
    ALT + F9运行到光标
    Alt + F8计算表达式
    F9恢复程序
    Ctrl + F8切换断点
    Ctrl + Shift + F8查看断点


    导航
    Shift + Esc键隐藏活动或最后一个激活的窗口
    Ctrl + Shift + F4关闭活动运行/消息/ / …选项卡
    Ctrl + Shift + Backspace键导航到最后编辑的位置
    Ctrl + Alt+B   到实施(S)
    Ctrl + Shift+I  打开快速定义查询
    Ctrl + U        转到super-method/super-class
    Alt + Home      组合显示导航栏


    书签
    Ctrl + F11切换书签助记符
    Ctrl +#[0-9]转到编号书签
    Shift + F11显示书签


    编辑
    Ctrl + Q      快速文档查询
    ALT + INSERT  生成的代码…器(getter,setter方法,构造函数)
    Ctrl + O      覆盖方法
    Ctrl + I      实现方法


    Alt + Enter   显示意图的行动和快速修复
    Shift + Tab   键缩进/取消缩进选中的行


    Ctrl + Shift + J  智能线连接(仅适用于HTML和JavaScript)
    Ctrl + Enter      智能线分割(HTML和JavaScript)
    Shift + Enter     开始新的生产线


    Ctrl + Delete   删除字(word)
    Ctrl + Backspace删除字开始
    Ctrl +小键盘+ / – 展开/折叠代码块
    Ctrl + Shift +小键盘+展开全部
    Ctrl + Shift +数字键盘关闭全部

    如下图

    1.界面中文方框问题

    Settings->Appearance中
    Theme 设置 Windows
    勾选Override default fonts by (not recommended),设置字体为宋体

    2.显示行号

    Settings->Editor->Appearance标签项,勾选Show line numbers

    3.光标不随意定位

    Settings->Editor中去掉Allow placement of caret after end of line。

    4.启动的时候不打开工程文件

    Settings->General去掉Reopen last project on startup.

    5.无法起动Tomcat( IntelliJ IDEA)

    请使用ZIP版的Tomcat

    6.快捷键问题

    可以使用其他软件的快捷键,
    Settings->Keymap

    7.快捷键冲突(自己修改)

    默认代码提示和补全快捷键跟输入法冲突,如何解决:Settings->Keymap

    在上面面的图中,点击COPY ,自己新建一个方案,如 T1

    然后开始设置快捷键,修改时,右击会弹出菜单,如下图,改成你想要的快捷键

    8.用*标识编辑过的文件

    Editor –> Editor Tabs
    选中Mark modifyied tabs with asterisk 

    9.编码设置:编辑器中中文乱码问题

    这个是项目字符编码设置错误
    FILE ->Settings->       有3处设置根据自己需要设置
    IDE Encondings:IDE编码 ,选择 IDE Encoding为GBK。这边要自己去调整了
    Project Encoding:项目编码
    Default encoding for properties files:默认文件编码

    10.编辑器中字体和大小

    FILE -> Settings> Editor->Colors & Fonts -> Font -> 右侧
    Size:字体大小
    Line spacing:行间距
    下框中是字体,左侧->可选择字体,右侧->实际应用字体

    11.显示文件夹或文件过滤

    File->Setting->File Types->Ignore file and folders
    里面填写你要的过滤不显示的
    注意大小写哦

    12.当前编辑文件定位

    方法1) 在编辑的所选文件按ALT+F1, 然后选择PROJECT VIEW

    方法2) 左侧 项目列表框 顶部的 定位图标

    13.优化文件保存

    File->Settings->General->
    Synchronize file on frame activation:个人需要是否取消同步文件
    Save files on framedeactivation:取消
    Save files automatically:选中,设置自动保存,设置 30秒自动保存时间,这样IDEA依然可以自动保持文件,所以在每次切换时,你需要按下Ctrl+S保存文件

    14.SVN设置

    Setting->Version control-> 右侧 VCS 下面选择 Subversion

    网络上比较流行的PHPStorm注册码:

    用户名:EMBRACE

    注册码:

    ===== LICENSE BEGIN =====

    11674-12042010

    0000064nA0kkqI8qwPBF1rebuLP2Js

    Shb1n3EDL6mUr9LnhpxzMTxV”zZNjA

    DVi1nwUvh7UuZ8FGwaN8WejHHHtFop

    ===== LICENSE END =====

    用户名:EMBRACE

    注册码:

    ===== LICENSE BEGIN =====

    11674-12042010

    0000064nA0kkqI8qwPBF1rebuLP2Js

    Shb1n3EDL6mUr9LnhpxzMTxV”zZNjA

    DVi1nwUvh7UuZ8FGwaN8WejHHHtFop

    ===== LICENSE END =====

  • hyperf-4