月度归档:2021年05月

PHP在进程相关的笔记

exec和pcntl_exec的区别

echo "开始执行\n";
pcntl_exec('/usr/bin/php', ['-r', 'sleep(10);']);

// 等待10秒后,程序结束
// 这行代码不会被执行
echo "PHP代码结束\n";

exec是在当前进程里新开了一个进程,并等待新进程执行完后再接着执行,新开进程的进程号和当前进程号不同。

pcntl_exec不新开进程,在当前进程接着执行,pcntl_exec后面的php代码不再被执行,接收不到输出。

进程信号处理

常用信号:

代码 数值 说明 操作
HUP 1 通常是重启、加载配置文件
INT 2 终端中断 Ctrl – C
QUIT 3 终端退出 Ctro – \
KILL 9 强制中断,信息不能被捕获
ALRM 14 警告
TERM 15 终止运行,会生成dump?
CONT 18 恢复执行
STOP 19 暂停执行
<?php
declare(ticks = 1);
$run = true;

function signal_handler($signal) {
    global $run;
    print "Caught SIGALRM: {$signal}\n";

    switch ($signal) {
        case SIGHUP:
            # 重新加载
            break;

        case SIGINT:
        case SIGQUIT:
            $run = false;
            break;
        
        default:
            # code...
            break;
    }
}

pcntl_signal(SIGHUP, "signal_handler");
pcntl_signal(SIGINT, "signal_handler");
pcntl_signal(SIGQUIT, "signal_handler");

while ($run) {
    sleep(1);
}

echo "end.";

注意啊,这东西不能在VS Code的控制台下运行,不然中断回调函数不会被执行。

 

PHP发送AWS邮件

安装SDK:
https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/getting-started_installation.html

发送demo代码:
https://docs.aws.amazon.com/ses/latest/DeveloperGuide/examples-send-using-sdk.html

准备好key, sec

use Aws\Ses\SesClient;
use Aws\Exception\AwsException;

$credentials = new Aws\Credentials\Credentials('xx', 'xx');

$SesClient = new SesClient([
    'version' => '2010-12-01',
    'region'  => 'us-east-1',
    'credentials' => $credentials,
]);

$sender_email = '[email protected]';

$recipient_emails = ['[email protected]'];

$subject = 'Amazon SES test (AWS SDK for PHP)';
$plaintext_body = 'This email was sent with Amazon SES using the AWS SDK for PHP.' ;
$html_body =  '<h1>AWS Amazon Simple Email Service Test Email</h1>'.
              '<p>This email was sent with <a href="https://aws.amazon.com/ses/">'.
              'Amazon SES</a> using the <a href="https://aws.amazon.com/sdk-for-php/">'.
              'AWS SDK for PHP</a>.</p>';
$char_set = 'UTF-8';

try {
    $result = $SesClient->sendEmail([
        'Destination' => [
            'ToAddresses' => $recipient_emails,
        ],
        'ReplyToAddresses' => [$sender_email],
        'Source' => $sender_email,
        'Message' => [
          'Body' => [
              'Html' => [
                  'Charset' => $char_set,
                  'Data' => $html_body,
              ],
              'Text' => [
                  'Charset' => $char_set,
                  'Data' => $plaintext_body,
              ],
          ],
          'Subject' => [
              'Charset' => $char_set,
              'Data' => $subject,
          ],
        ],
    ]);
    $messageId = $result['MessageId'];
    echo("Email sent! Message ID: $messageId"."\n");
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo("The email was not sent. Error message: ".$e->getAwsErrorMessage()."\n");
    echo "\n";
}

 

对于使用php比较老的版本,可以用这个第三方实现库。

https://github.com/daniel-zahariev/php-aws-ses

 

获取YouTube的博主和视频信息

有3种报表:
1、通过DataApi,这种方式相对较直接,通过调用api获取数据,也可以操作数据(需要登录验证)2、Analytics API:这个报表是实时获取。
3、Reporting API:这个是生成报表数据再异步下载的,可以批量生成,如果数据量很大的话,建议用这个。

现在我们用的是第一种方式。

打开:https://console.cloud.google.com/,建立项目。
“API和服务“里,开通”库“里的”YouTube Data API v3”
开通后会得到token,后面会需要。

在这里可以查看文档,可以方便的用他们提供的api tools进行测试。
https://developers.google.com/youtube/v3/docs

有一个比较坑人的地方是,打开测试Widget后,下面的用OAuth 2.0是默认开启的,如下图:

当把这个取消后,右边生成的代码不会改变,要在上面手动改一个参数后,才会变。
要注意这个问题,不然代码是有问题的,始终会按OAuth 2.0的方式生成。

PHP的使用教程在这里:
https://developers.google.com/youtube/v3/quickstart/php

获取博主信息

请求:
GET https://youtube.googleapis.com/youtube/v3/channels?part=snippet%2CcontentDetails%2Cstatistics&forUsername=GoogleDevelopers&key=[YOUR_API_KEY] HTTP/1.1

Authorization: Bearer [YOUR_ACCESS_TOKEN]
Accept: application/json

返回:
{
  "kind": "youtube#channelListResponse",
  "etag": "LdG9BNUGur4iY7vuvSdW3_7PNP8",
  "pageInfo": {
    "totalResults": 1,
    "resultsPerPage": 5
  },
  "items": [
    {
      "kind": "youtube#channel",
      "etag": "6MkQzgqGne9K0Ol8mcuIHT0K8HQ",
      "id": "UC_x5XG1OV2P6uZZ5FSM9Ttw",
      "snippet": {
        "title": "Google Developers",
        "description": "The Google Developers channel features talks from events, educational series, best practices, tips, and the latest updates across our products and platforms.\n\nSubscribe to Google Developers → https://goo.gle/developers\n",
        "customUrl": "googledevelopers",
        "publishedAt": "2007-08-23T00:34:43Z",
        "thumbnails": {
          "default": {
            "url": "https://yt3.ggpht.com/ytc/AAUvwngOju7AKiAvKEs1wtsZN366tyNPyMq3nD8eFkMF7bE=s88-c-k-c0x00ffffff-no-rj",
            "width": 88,
            "height": 88
          },
          "medium": {
            "url": "https://yt3.ggpht.com/ytc/AAUvwngOju7AKiAvKEs1wtsZN366tyNPyMq3nD8eFkMF7bE=s240-c-k-c0x00ffffff-no-rj",
            "width": 240,
            "height": 240
          },
          "high": {
            "url": "https://yt3.ggpht.com/ytc/AAUvwngOju7AKiAvKEs1wtsZN366tyNPyMq3nD8eFkMF7bE=s800-c-k-c0x00ffffff-no-rj",
            "width": 800,
            "height": 800
          }
        },
        "localized": {
          "title": "Google Developers",
          "description": "The Google Developers channel features talks from events, educational series, best practices, tips, and the latest updates across our products and platforms.\n\nSubscribe to Google Developers → https://goo.gle/developers\n"
        },
        "country": "US"
      },
      "contentDetails": {
        "relatedPlaylists": {
          "likes": "",
          "favorites": "",
          "uploads": "UU_x5XG1OV2P6uZZ5FSM9Ttw"
        }
      },
      "statistics": {
        "viewCount": "182712151",
        "subscriberCount": "2160000",
        "hiddenSubscriberCount": false,
        "videoCount": "5340"
      }
    }
  ]
}

 

根据用户获取视频列表,分页的时候需要注意传pageTaken参数进去,该值是该API上一次返回的,如果不传的话,是第一页。

发送:
List编号是上一个接口返回的UU开始的那个
GET https://youtube.googleapis.com/youtube/v3/playlistItems?part=contentDetails%2Csnippet%2Cstatus&playlistId=[List编号]&key=[YOUR_API_KEY] HTTP/1.1

Authorization: Bearer [YOUR_ACCESS_TOKEN]
Accept: application/json

返回:
{
  "kind": "youtube#playlistItemListResponse",
  "etag": "sKFBg0QAFkDAaRtysTrebMkkcN8",
  "nextPageToken": "CDIQAA",
  "items": [
    {
      "kind": "youtube#playlistItem",
      "etag": "n0z9esMo-NzLrFpY_pRAVr9dd7w",
      "id": "VVVfeDVYRzFPVjJQNnVaWjVGU005VHR3LlYtUXRjd0txOUpr",
      "snippet": {
        "publishedAt": "2021-05-13T20:17:27Z",
        "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw",
        "title": "Google I/O 2021, Android Studio 4.2, Google Play update, and more!",
        "description": "TL;DR 246 | The Google Developer News Show\n \n0:00 - Google I/O 2021 → https://goo.gle/3tKActE \n0:37 - Android Studio 4.2 → https://goo.gle/3hjinPQ  \n1:14 - New safety section in Google Play → https://goo.gle/3eH5rBB  \n1:46 - New Dashboard in Google Developer Profiles → https://goo.gle/33DWeDB  \n2:16 - Please remember to like, subscribe, and share! \n\nHere to bring you the latest developer news from across Google is Developer Advocate Meghan Metha. Tune in every week for a new episode, and let us know what you think of the latest announcements in the comments below! 😃\n\nFollow Google Developers on Instagram → https://goo.gle/googledevs             \n\nWatch more #DevShow → https://goo.gle/GDevShow               \nSubscribe to Google Developers → https://goo.gle/developers \n\n#Google #Developers",
        "thumbnails": {
          "default": {
            "url": "https://i.ytimg.com/vi/V-QtcwKq9Jk/default.jpg",
            "width": 120,
            "height": 90
          },
          "medium": {
            "url": "https://i.ytimg.com/vi/V-QtcwKq9Jk/mqdefault.jpg",
            "width": 320,
            "height": 180
          },
          "high": {
            "url": "https://i.ytimg.com/vi/V-QtcwKq9Jk/hqdefault.jpg",
            "width": 480,
            "height": 360
          },
          "standard": {
            "url": "https://i.ytimg.com/vi/V-QtcwKq9Jk/sddefault.jpg",
            "width": 640,
            "height": 480
          },
          "maxres": {
            "url": "https://i.ytimg.com/vi/V-QtcwKq9Jk/maxresdefault.jpg",
            "width": 1280,
            "height": 720
          }
        },
        "channelTitle": "Google Developers",
        "playlistId": "UU_x5XG1OV2P6uZZ5FSM9Ttw",
        "position": 0,
        "resourceId": {
          "kind": "youtube#video",
          "videoId": "V-QtcwKq9Jk"
        },
        "videoOwnerChannelTitle": "Google Developers",
        "videoOwnerChannelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw"
      },
      "contentDetails": {
        "videoId": "V-QtcwKq9Jk",
        "videoPublishedAt": "2021-05-13T21:00:21Z"
      },
      "status": {
        "privacyStatus": "public"
      }
    }
  ],
  "pageInfo": {
    "totalResults": 5340,
    "resultsPerPage": 50
  }
}

根据视频ID获取视频信息

请求:
GET https://youtube.googleapis.com/youtube/v3/videos?part=snippet%2CcontentDetails%2Cstatistics&id=Ks-_Mh1QhMc%2CV-QtcwKq9Jk&key=[YOUR_API_KEY] HTTP/1.1

Authorization: Bearer [YOUR_ACCESS_TOKEN]
Accept: application/json

id字段可以传以逗号分隔的多个id,该id是从上面的一个请求的返回的,contentDetails下的VideoId

返回:
{
  "kind": "youtube#videoListResponse",
  "etag": "zWPULojPN0SgmjLS7RzRh6217I4",
  "items": [
    {
      "kind": "youtube#video",
      "etag": "H0Be3-hhwR0AH_bFMPSsvwMkFhg",
      "id": "Ks-_Mh1QhMc",
      "snippet": {
        "publishedAt": "2012-10-01T15:27:35Z",
        "channelId": "UCAuUUnT6oDeKwE6v1NGQxug",
        "title": "Your body language may shape who you are | Amy Cuddy",
        "description": "Body language affects how others see us, but it may also change how we see ourselves. Social psychologist Amy Cuddy argues that \"power posing\" -- standing in a posture of confidence, even when we don't feel confident -- can boost feelings of confidence, and might have an impact on our chances for success. (Note: Some of the findings presented in this talk have been referenced in an ongoing debate among social scientists about robustness and reproducibility. Read Amy Cuddy's response here: http://ideas.ted.com/inside-the-debate-about-power-posing-a-q-a-with-amy-cuddy/)\n\nGet TED Talks recommended just for you! Learn more at https://www.ted.com/signup.\n\nThe TED Talks channel features the best talks and performances from the TED Conference, where the world's leading thinkers and doers give the talk of their lives in 18 minutes (or less). Look for talks on Technology, Entertainment and Design -- plus science, business, global issues, the arts and more.\n\nFollow TED on Twitter: http://www.twitter.com/TEDTalks\nLike TED on Facebook: https://www.facebook.com/TED\n\nSubscribe to our channel: https://www.youtube.com/TED",
        "thumbnails": {
          "default": {
            "url": "https://i.ytimg.com/vi/Ks-_Mh1QhMc/default.jpg",
            "width": 120,
            "height": 90
          },
          "medium": {
            "url": "https://i.ytimg.com/vi/Ks-_Mh1QhMc/mqdefault.jpg",
            "width": 320,
            "height": 180
          },
          "high": {
            "url": "https://i.ytimg.com/vi/Ks-_Mh1QhMc/hqdefault.jpg",
            "width": 480,
            "height": 360
          },
          "standard": {
            "url": "https://i.ytimg.com/vi/Ks-_Mh1QhMc/sddefault.jpg",
            "width": 640,
            "height": 480
          },
          "maxres": {
            "url": "https://i.ytimg.com/vi/Ks-_Mh1QhMc/maxresdefault.jpg",
            "width": 1280,
            "height": 720
          }
        },
        "channelTitle": "TED",
        "tags": [
          "Amy Cuddy",
          "TED",
          "TEDTalk",
          "TEDTalks",
          "TED Talk",
          "TED Talks",
          "TEDGlobal",
          "brain",
          "business",
          "psychology",
          "self",
          "success"
        ],
        "categoryId": "22",
        "liveBroadcastContent": "none",
        "defaultLanguage": "en",
        "localized": {
          "title": "Your body language may shape who you are | Amy Cuddy",
          "description": "Body language affects how others see us, but it may also change how we see ourselves. Social psychologist Amy Cuddy argues that \"power posing\" -- standing in a posture of confidence, even when we don't feel confident -- can boost feelings of confidence, and might have an impact on our chances for success. (Note: Some of the findings presented in this talk have been referenced in an ongoing debate among social scientists about robustness and reproducibility. Read Amy Cuddy's response here: http://ideas.ted.com/inside-the-debate-about-power-posing-a-q-a-with-amy-cuddy/)\n\nGet TED Talks recommended just for you! Learn more at https://www.ted.com/signup.\n\nThe TED Talks channel features the best talks and performances from the TED Conference, where the world's leading thinkers and doers give the talk of their lives in 18 minutes (or less). Look for talks on Technology, Entertainment and Design -- plus science, business, global issues, the arts and more.\n\nFollow TED on Twitter: http://www.twitter.com/TEDTalks\nLike TED on Facebook: https://www.facebook.com/TED\n\nSubscribe to our channel: https://www.youtube.com/TED"
        },
        "defaultAudioLanguage": "en"
      },
      "contentDetails": {
        "duration": "PT21M3S",
        "dimension": "2d",
        "definition": "hd",
        "caption": "true",
        "licensedContent": true,
        "contentRating": {},
        "projection": "rectangular"
      },
      "statistics": {
        "viewCount": "19630769",
        "likeCount": "293174",
        "dislikeCount": "5600",
        "favoriteCount": "0",
        "commentCount": "8671"
      }
    },
    {
      "kind": "youtube#video",
      "etag": "eLxJnVkjRvCXeqs4kfxlWfT5iSQ",
      "id": "V-QtcwKq9Jk",
      "snippet": {
        "publishedAt": "2021-05-13T21:00:21Z",
        "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw",
        "title": "Google I/O 2021, Android Studio 4.2, Google Play update, and more!",
        "description": "TL;DR 246 | The Google Developer News Show\n \n0:00 - Google I/O 2021 → https://goo.gle/3tKActE \n0:37 - Android Studio 4.2 → https://goo.gle/3hjinPQ  \n1:14 - New safety section in Google Play → https://goo.gle/3eH5rBB  \n1:46 - New Dashboard in Google Developer Profiles → https://goo.gle/33DWeDB  \n2:16 - Please remember to like, subscribe, and share! \n\nHere to bring you the latest developer news from across Google is Developer Advocate Meghan Metha. Tune in every week for a new episode, and let us know what you think of the latest announcements in the comments below! 😃\n\nFollow Google Developers on Instagram → https://goo.gle/googledevs             \n\nWatch more #DevShow → https://goo.gle/GDevShow               \nSubscribe to Google Developers → https://goo.gle/developers \n\n#Google #Developers",
        "thumbnails": {
          "default": {
            "url": "https://i.ytimg.com/vi/V-QtcwKq9Jk/default.jpg",
            "width": 120,
            "height": 90
          },
          "medium": {
            "url": "https://i.ytimg.com/vi/V-QtcwKq9Jk/mqdefault.jpg",
            "width": 320,
            "height": 180
          },
          "high": {
            "url": "https://i.ytimg.com/vi/V-QtcwKq9Jk/hqdefault.jpg",
            "width": 480,
            "height": 360
          },
          "standard": {
            "url": "https://i.ytimg.com/vi/V-QtcwKq9Jk/sddefault.jpg",
            "width": 640,
            "height": 480
          },
          "maxres": {
            "url": "https://i.ytimg.com/vi/V-QtcwKq9Jk/maxresdefault.jpg",
            "width": 1280,
            "height": 720
          }
        },
        "channelTitle": "Google Developers",
        "tags": [
          "GDS: Yes",
          "google i/o",
          "google i/o 2021",
          "google i/o 21",
          "android studio 4.2",
          "google play",
          "google play update",
          "google play safety section",
          "google developer profiles",
          "google developer profiles dashboard",
          "android",
          "android developers",
          "google developer show",
          "the google developer show",
          "the developer show",
          "dev show",
          "dev news",
          "tl;dr",
          "developer news",
          "news",
          "updates",
          "ds",
          "google developers",
          "google news",
          "developers",
          "developer",
          "google latest",
          "google",
          "Meghan Metha"
        ],
        "categoryId": "28",
        "liveBroadcastContent": "none",
        "defaultLanguage": "en",
        "localized": {
          "title": "Google I/O 2021, Android Studio 4.2, Google Play update, and more!",
          "description": "TL;DR 246 | The Google Developer News Show\n \n0:00 - Google I/O 2021 → https://goo.gle/3tKActE \n0:37 - Android Studio 4.2 → https://goo.gle/3hjinPQ  \n1:14 - New safety section in Google Play → https://goo.gle/3eH5rBB  \n1:46 - New Dashboard in Google Developer Profiles → https://goo.gle/33DWeDB  \n2:16 - Please remember to like, subscribe, and share! \n\nHere to bring you the latest developer news from across Google is Developer Advocate Meghan Metha. Tune in every week for a new episode, and let us know what you think of the latest announcements in the comments below! 😃\n\nFollow Google Developers on Instagram → https://goo.gle/googledevs             \n\nWatch more #DevShow → https://goo.gle/GDevShow               \nSubscribe to Google Developers → https://goo.gle/developers \n\n#Google #Developers"
        },
        "defaultAudioLanguage": "en-US"
      },
      "contentDetails": {
        "duration": "PT2M33S",
        "dimension": "2d",
        "definition": "hd",
        "caption": "true",
        "licensedContent": false,
        "contentRating": {},
        "projection": "rectangular"
      },
      "statistics": {
        "viewCount": "6744",
        "likeCount": "301",
        "dislikeCount": "8",
        "favoriteCount": "0",
        "commentCount": "10"
      }
    }
  ],
  "pageInfo": {
    "totalResults": 2,
    "resultsPerPage": 2
  }
}

 

CentOS安装Samba和mac、win10连接

安装samba
yum -y install samba

关防火墙:
systemctl stop firewalld.service

关SELinux
setenforce 0
查看Selinux
getenforce
返回的结果分为三种:Enforcing,Permissive和Disabled。其中,Enforcing-代表记录警告且阻止可疑行为;Permissive-代表仅记录安全警告但不阻止可疑行为;Disabled表示被禁用。

如果不关的话,会导致能登录,但无法访问的情况。

修改smb.conf,增加下面的节点

[share]
        path = /data/share/office
        comment = xxxxx
        public = yes
        writable = yes
        browseable = yes
        guest ok = no
        valid users = office,ben
        available = yes

增加用户office
useradd office
useradd ben
这里不用为他们指定密码

设置samba的密码
smbpasswd -a office
smbpasswd -a ben
必须要先加用户,不然会出现:Failed to add entry for user xxxxx. 的错误

设置目录的权限:
chown office:office /data/share/office

同一时间,只能以一个用户连接上smb服务器,如果需要切换用户,需要先断开,在windows下,可以用net use断开:
net use \\1.1.1.1\xxx /del

 

Redisearch使用笔记

通过docker安装:
docker run -p 6380:6379 redislabs/redisearch:latest

127.0.0.1:6379> FT.CREATE myIdx ON HASH PREFIX 1 doc: SCHEMA title TEXT WEIGHT 5.0 body TEXT url TEXT

127.0.0.1:6379>hset doc:1 title “hello world” body “lorem ipsum” url “http://redis.io”
127.0.0.1:6379>hset doc:2 title “hello coupon codes” body “lorem ipsum” url “http://redis.io”
127.0.0.1:6379>hset doc:3 title “hello promotions” body “lorem ipsum” url “http://redis.io”

默认情况下他会处理单复数的问题

命令文档:https://oss.redislabs.com/redisearch/Commands/

搜索词的语法:https://oss.redislabs.com/redisearch/Query_Syntax/

默认情况下多个以空格分隔的词是and判断,如果要是or的关系用|生成

Mac下连接L2TP后无法访问外网和ROUTE操作记录

Mac下查看路由规则:
netstat -r

Mac下查看dns:
scutil –dns

Route管理:
route -n add -net 221.5.203.0 -netmask 255.255.255.0 10.1.0.1
route -n delete -net 221.5.203.0 -netmask 255.255.255.0 10.1.0.1

无法访问外网的问题找了一下,是因为telnet dns 服务器53端口的时候响应特别的慢。

所以把vpn的dns设置成了家里的网关地址就行了。