liziyu 发布的文章

stream_bucket_append函数:为队列添加数据 
stream_bucket_make_writeable函数:从操作的队列中返回一个数据对象
stream_bucket_new函数:为当前队列创建一个新的数据
stream_bucket_prepend函数:预备数据到队列 
stream_context_create函数:创建数据流上下文
stream_context_get_default函数:获取默认的数据流上下文
stream_context_get_options函数:获取数据流的设置
stream_context_set_option函数:对数据流、数据包或者上下文进行设置
stream_context_set_params函数:为数据流、数据包或者上下文设置参数
stream_copy_to_stream函数:在数据流之间进行复制操作
stream_filter_append函数:为数据流添加过滤器
stream_filter_prepend函数:为数据流预备添加过滤器
stream_filter_register函数:注册一个数据流的过滤器并作为PHP类执行
stream_filter_remove函数:从一个数据流中移除过滤器
stream_get_contents函数:读取数据流中的剩余数据到字符串
stream_get_filters函数:返回已经注册的数据流过滤器列表
stream_get_line函数:按照给定的定界符从数据流资源中获取行
stream_get_meta_data函数:从封装协议文件指针中获取报头/元数据
stream_get_transports函数:返回注册的Socket传输列表
stream_get_wrappers函数:返回注册的数据流列表
stream_register_wrapper函数:注册一个用PHP类实现的URL封装协议
stream_select函数:接收数据流数组并等待它们状态的改变
stream_set_blocking函数:将一个数据流设置为堵塞或者非堵塞状态
stream_set_timeout函数:对数据流进行超时设置
stream_set_write_buffer函数:为数据流设置缓冲区
stream_socket_accept函数:接受由函数stream_ socket_server()创建的Socket连接
stream_socket_client函数:打开网络或者UNIX主机的Socket连接
stream_socket_enable_crypto函数:为一个已经连接的Socket打开或者关闭数据加密
stream_socket_get_name函数:获取本地或者网络Socket的名称
stream_socket_pair函数:创建两个无区别的Socket数据流连接
stream_socket_recvfrom函数:从Socket获取数据,不管其连接与否
stream_socket_sendto函数:向Socket发送数据,不管其连接与否
stream_socket_server函数:创建一个网络或者UNIX Socket服务端
stream_wrapper_restore函数:恢复一个事先注销的数据包
stream_wrapper_unregister函数:注销一个URL地址包


定义形式如下:

struct books {
    int count;
    double average;
    double scores[];    //伸缩型数组成员
};

它必须满足以下几点:

1、伸缩型数组必须是结构的最后一个成员;
2、结构中必须至少有一个成员;
3、伸缩型数组类似普通数组,只是它的方括号内必须为空;

它存在的意义:

定义struct books 类型的变量,并不是为了让此数组中存值(初始值)而是希望声明
一个该变量的指针;然后在函数中使用时,动态的分配数组长度以后再赋值。

pf = malloc(sizeof(struct books) + n * sizeof(double)); //这里的n即为伸缩数组的长度

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define SLEN 81

struct namect {
    char * fname; //定义字符指针
    char * lname;
    int letters;
};

void getinfo(struct namect *); //传指针分配内存
void makeinfo(struct namect *);
void showinfo(const struct namect *); //只显示结构内容不能修改结构变量
void cleanup(struct namect *);
char * s_gets(char * st, int n);

int main(void)
{
    struct namect person;
    getinfo(&person);
    makeinfo(&person);
    showinfo(&person);
    cleanup(&person);

    return 0;
}

void getinfo(struct namect * pst)
{
    char temp[SLEN];
    printf("输入英文的姓\n");
    s_gets(temp, SLEN);
    //分配内存
    pst->fname = (char *) malloc(strlen(temp) + 1);
    //把名子拷贝到分配的内在中
    strcpy(pst->fname, temp);
    printf("输入英文的名\n");
    s_gets(temp, SLEN);
    pst->lname = (char *) malloc(strlen(temp) + 1);
    strcpy(pst->lname, temp);
}

void makeinfo(struct namect * pst)
{
    pst->letters = strlen(pst->fname) + strlen(pst->lname);
}

void showinfo(const struct namect * pst)
{
    printf("%s  %s, 你的 %d 字母\n", pst->fname, pst->lname, pst->letters);
}

void cleanup(struct namect * pst)
{
    free(pst->fname);
    free(pst->lname);
}

char * s_gets(char * st, int n)
{
    char * ret_val;
    char * find;

    ret_val = fgets(st, n, stdin);
    if(ret_val) {
        find = strchr(st, '\n');
        if(find) {
            *find = '\0';
        } else {
            while(getchar() != '\n') {
                continue;
            }
        }
    }
    return ret_val;
}

第一步:设置.htaccess于根目录

<IfModule mod_rewrite.c>
  Options +FollowSymlinks -Multiviews
  RewriteEngine On

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  #  RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
  RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
</IfModule>

第二步:

设置-->永久链接-->是否使用地址重写功能-->启用.
注意要“强制启用”

代码

#include <stdio.h>

int main(void)
{
    int urn[5] = {100,200,300,400,500};
    int *ptr1, *ptr2, *ptr3;
    
    ptr1 = urn; //第1个元素地址0x00007ffeefbff470
    ptr2 = &urn[2];  //第3个元素地址0x00007ffeefbff478
    
    printf("ptr1 = %p, *ptr1 = %d, &ptr1 = %p\n", ptr1, *ptr1, &ptr1); //ptr1表示第1个元素地址470  第1个元素值100  表示变量ptr1本身的地址460
    
    ptr3 = ptr1 + 4; //批针与整数和相加意思是,整数与指针指向的类型的字节数相乘 再与初始地址相加(16进制)
    printf("ptr1+4 = %p, *(ptr1+4) = %d\n", ptr1 + 4, *(ptr1 + 4)); //500的地址480  值500  (4*4=16位)
    
    ptr1++; //自增指针,意思是指针移至下一个元素
    printf("ptr1 = %p, *ptrl = %d, &ptr1 =  %p\n", ptr1, *ptr1, &ptr1); //200的地址474  200  prt1指针变量自身的地址460
    
    ptr2--;  //先获取地址再减
    printf("ptr2 = %p, *ptr2 = %d, &ptr2 = %p\n", ptr2, *ptr2, &ptr2); //474   200     ptr2变量自身的变量地址458
    
    --ptr1;
    ++ptr2;
    printf("ptr1 = %p, ptr2 = %p\n", ptr1, ptr2); //470    478
    printf("ptr2 = %p, ptr1 = %p, ptr2 - ptr1 = %td\n", ptr2, ptr1, ptr2 - ptr1); //478  470  2(表示2个整形类型的字节)
    printf("ptr3 = %p, ptr3 - 2 = %p\n", ptr3, ptr3 - 2); //480  478
    
    return 0;
}

结果

ptr1 = 0x7ffeefbff470, *ptr1 = 100, &ptr1 = 0x7ffeefbff460
ptr1+4 = 0x7ffeefbff480, *(ptr1+4) = 500
ptr1 = 0x7ffeefbff474, *ptrl = 200, &ptr1 =  0x7ffeefbff460
ptr2 = 0x7ffeefbff474, *ptr2 = 200, &ptr2 = 0x7ffeefbff458
ptr1 = 0x7ffeefbff470, ptr2 = 0x7ffeefbff478
ptr2 = 0x7ffeefbff478, ptr1 = 0x7ffeefbff470, ptr2 - ptr1 = 2
ptr3 = 0x7ffeefbff480, ptr3 - 2 = 0x7ffeefbff478
Program ended with exit code: 0

Xcode10.2与macOS运行

array_change_key_case 更改数组中所有键为大写或小写
array_chunk 将一个数组分割成多个
array_column 返回数组中指定列的值
array_combine 使用一个数组作为键,另一个数组作为值创建新数组
array_count_values 统计数组中各个值的个数
array_diff_assoc 带索引检查计算数组的差集
array_diff_key 使用键名比较数组的差集
array_diff_uassoc 用用户提供的回调函数做索引检查来计算数组的差集
array_diff_ukey 用回调函数对键名比较计算数组差集
array_diff 计算数组差集
array_fill_keys 使用指定的键和值填充数组
array_fill 用给定的值填充数组
array_filter 使用回调函数过滤数组元素
array_flip 交换数组中的键和值
array_intersect_assoc 带索引计算数组的交集
array_intersect_key 使用键名比较计算数组的交集
array_intersect_uassoc 带索引检查计算数组的交集,用回调函数比较索引
array_intersect_ukey 在键名上使用回调函数来比较计算数组的交集
array_intersect 计算数组的交集
array_is_list 检查给定的数组是否为列表 (PHP 8 >= 8.1.0)
array_key_exists 检查数组里是否有指定的键名或索引
array_key_first 获取数组的第一个键值
array_key_last 获取一个数组的最后一个键值
array_keys 返回数组中部分或所有的键名
array_map 为数组每个元素应用回调函数
array_merge_recursive 递归的合并一个或多个数组
array_merge 合并一个或多个数组
array_multisort 对多个数组或多维数组进行排序
array_pad 以指定长度将一个值填充进数组
array_pop 弹出数组最后一个单元(出栈)
array_product 计算数组中所有值的乘积
array_push 将一个或多个单元压入数组末尾(入栈)
array_rand 从数组中随机取出一个或多个随机键
array_reduce 用回调函数迭代地将数组简化为单一的值
array_replace_recursive 使用传递的数组递归替换第一个数组的元素
array_replace 使用传递的数组替换第一个数组元素
array_reverse 返回单元顺序相反的数组
array_search 在数组中搜索给定的值,如果成功返回首个相应的键名
array_shift 将数组开头的单元移出数组
array_slice 从数组中取出一段
array_splice 去掉数组中的某一部分并用其它值取代
array_sum 对数组中的所有值求和
array_udiff_assoc 带索引检查计算数组的差集,用回调函数比较数据
array_udiff_uassoc 带索引检查计算数组的差集,用回调函数比较数据和索引
array_udiff 用回调函数比较数据来计算数组的差集
array_uintersect_assoc 带索引检查计算数组的交集,用回调函数比较数据
array_uintersect_uassoc 带索引检查计算数组的交集,用单独的回调函数比较数据和索引
array_uintersect 计算数组的交集,用回调函数比较数据
array_unique 移除数组中重复的值
array_unshift 在数组开头插入一个或多个单元
array_values 返回数组中所有的值
array_walk_recursive 对数组中的每个成员递归地应用用户函数
array_walk 使用用户自定义函数对数组中的每个元素做回调处理
array 新建一个数组
arsort 对数组进行降向排序并保持索引关系
asort 对数组进行升序排序并保持索引关系
compact 建立一个数组,包括变量名和它们的值
count 计算数组中的单元数目,或对象中的属性个数
current 返回数组中当前的值
each 返回数组中当前的键/值对并将数组指针向前移动一步(自PHP7.2起废弃)
end 将数组的内部指针指向最后一个单元
extract 从数组中将变量导入到当前的符号表
in_array 检查数组中是否存在某个值
key_existsarray_key_exists
key 返回数组中当前单元的键名
krsort 对数组按照键名逆向排序
ksort 对数组根据键名升序排序
list 把数组中的值赋给一组变量
natcasesort 用“自然排序”算法对数组进行不区分大小写字母的排序
natsort 用“自然排序”算法对数组排序
next 将数组中的内部指针向前移动一位
poscurrent
prev 将数组的内部指针倒回一位
range 根据范围创建数组,包含指定的元素
reset 将数组的内部指针指向第一个单元
rsort 对数组进行降序排序
shuffle 打乱数组
sizeofcount()
sort 对数组升序排序
uasort 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联
uksort 使用用户自定义的比较函数对数组中的键名进行排序
usort 使用用户自定义的比较函数对数组中的值进行排序

转自: https://learnku.com/articles/63034

PHP Fileinfo extension must be installed/enabled to use Intervention Image.

必须安装扩展 fileInfo切记。
安装扩展 opcache切记。
php_fileinfo, php_mbstring, php_openssl,
删除被禁用的proc_open函数。

备份设置:
'dump_binary_path' => '/usr/bin/', //BT宝塔
'dump_binary_path' => 'D:\phpstudyV81\Extensions\MySQL5.7.26\bin', //win

权限目录:
chmod -R 777 bootstrap/
chmod -R 777 storage/
chmod -R 777 public/

Linux:
whereis mysql 查询mysql路径。

参考:https://www.jianshu.com/p/c692761bbd0d