1. curl
/**
* php8.0 一下 不含8.0
* curl 合并get post方法
*/
function curlSend($url, $data = ''){
$cl = curl_init();
curl_setopt($cl, CURLOPT_URL, $url);
curl_setopt($cl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($cl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($cl, CURLOPT_SSL_VERIFYHOST, false);
if(! empty($data)){
curl_setopt($cl, CURLOPT_POST, 1);
curl_setopt($cl, CURLOPT_POSTFIELDS, $data);
}
$output = curl_exec($cl);
curl_close($cl);
return $output;
}
/** php8.0 */
function curlSend($url,$data=''){
//生成curl对象
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
if(! empty($data)){
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
return curl_exec($curl);
}
/**
* 获取ssl过期时间
*/
function curlSend($url){
//生成curl对象
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($curl, CURLOPT_CERTINFO, 1);
//https://curl.se/ca/cacert.pem 下载*.pem文件
curl_setopt($curl,CURLOPT_CAINFO,storage_path('app/').'/cacert.pem');
curl_exec($curl);
$certinfo = curl_getinfo($curl,CURLINFO_CERTINFO);
return date('Y-m-d',strtotime($certinfo[0]['Expire date']));
}
2. 读取xml
/**
* @param string $xml 文件路径加名字或者xml字符串
* @param array|string $tagName string:tagname,array:['tagname'=>item,'tagname'=>item];
* @return array
*/
function readXml(string $xml,array|string $tagName):array
{
$doc = new \DOMDocument();
if(is_file($xml)){
$doc->load($xml);
}else{
$doc->loadXML($xml);
}
$result = [];
if(is_array($tagName)){
foreach ($tagName as $name => $item){
$key = $item == 0 ? $name : $name.'_'.$item;
$result[$key] = $doc->getElementsByTagName($name)->item($item)->nodeValue;
}
}
if(is_string($tagName))$result[$tagName] = $doc->getElementsByTagName($tagName)->item(0)->nodeValue;
return $result;
}
/** 正则匹配 */
function readXml($xml,$xmlTag = ['RetCode', 'JobID']){
$arr = [];
foreach($xmlTag as $x) {
preg_match_all("/<".$x.">.*<\/".$x.">/", $xml, $temp);
$arr[] = $temp[0];
}
$data = [];
foreach($arr as $key => $value) {
foreach($value as $k => $v) {
$a = explode($xmlTag[$key].'>', $v);
$v = substr($a[1], 0, strlen($a[1])-2);
$data[$k][$xmlTag[$key]] = $v;
}
}
return $data;
}
3. 二维数组根据某个值排序
/**
* 二维数组根据某个字段排序
* @param array $array 要排序的数组
* @param string $sortKey 要排序的键字段
* @param string $sort 排序类型 SORT_ASC|SORT_DESC
* @return array 排序后的数组
*/
function arraySort($array, $sortKey, $sort = SORT_DESC):array
{
$sortValue = [];
foreach ($array as $k => $v) {
$sortValue[$k] = $v[$sortKey];
}
array_multisort($sortValue, $sort, $array);
return $array;
}
4. 导出scv
public function export()
{
$users = User::query()
->where('type', 1)
->get()
->map(function (User $user) {
return [
$user->mobile,
$user->created_at->toDateTimeString(),
];
})->toArray();
$fileName = '导出_' . now()->format('YmdHis') . '.csv';
$path = storage_path('app/' . $fileName);
$file = fopen($path, 'w');
fwrite($file, chr(0xEF) . chr(0xBB) . chr(0xBF));
fputcsv($file, [ '姓名', '注册时间']);
$headers = [
'Content-Type' => 'text/csv',
];
foreach ($users as $user) {
fputcsv($file, $user);
}
fclose($file);
return response()->download($path, $fileName, $headers);
}