设为首页 收藏本站
查看: 566|回复: 0

[经验分享] php 获取gmail/yahoo 联系人地址

[复制链接]

尚未签到

发表于 2017-4-4 11:32:01 | 显示全部楼层 |阅读模式
  

  gmail:

<?php
error_reporting(E_ALL);
$user = "****@gmail.com";
$password = "****";
// ref: http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html
// step 1: login
$login_url = "https://www.google.com/accounts/ClientLogin";
$fields = array(
'Email' => $user,
'Passwd' => $password,
'service' => 'cp', // <== contact list service code
'source' => 'test-google-contact-grabber',
'accountType' => 'GOOGLE',
);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL,$login_url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS,$fields);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
$returns = array();
foreach (explode("\n",$result) as $line)
{
$line = trim($line);
if (!$line) continue;
list($k,$v) = explode("=",$line,2);
$returns[$k] = $v;
}
curl_close($curl);
// step 2: grab the contact list
$feed_url = "http://www.google.com/m8/feeds/contacts/$user/full?alt=json&max-results=250";
$header = array(
'Authorization: GoogleLogin auth=' . $returns['Auth'],
);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $feed_url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
curl_close($curl);
$data = json_decode($result);
$contacts = array();
foreach ($data->feed->entry as $entry)
{
$contact = new stdClass();
$contact->title = $entry->title->{'$t'};
$contact->email = $entry->{'gd$email'}[0]->address;
$contacts[] = $contact;
}
var_dump($contacts);
 
  yahoo:

<?
require_once('class.GrabYahoo.php');
// Yahoo! Account Username
$login    = "****@yahoo.com";
// Yahoo! Account Password
$password = "****";
// Initializing Class
$yahoo  = new GrabYahoo;
/*
Setting the desired Service
1. addressbook => Used to grab Yahoo! Address Book
2. messenger => Used to grab Yahoo! Messenger List
3. newmail => Used to grab number of new Yahoo! mails
4. calendar => Used to grab Yahoo! Calendar entries
*/
$yahoo->service = "addressbook";
/*
Set to true if HTTP proxy is required to browse net
- Setting it to true will require to provide Proxy Host Name and Port number
*/
$yahoo->isUsingProxy = false;
// Set the Proxy Host Name, isUsingProxy is set to true
$yahoo->proxyHost = "";
// Set the Proxy Port Number
$yahoo->proxyPort = "";
// Set the location to save the Cookie Jar File
$yahoo->cookieJarPath = "./";
/*
Execute the Service
- Require to pass Yahoo! Account Username and Password
*/
$yahooList = $yahoo->execService($login, $password);
// Printing the array generated by the Class
dump($yahooList);
/*
Printing new mail status
- True (1) if there is new mail(s)
- False (0) if there is no new mail
*/
//$newMailStatus  = $yahoo->getNewMailStatus();
//echo $newMailStatus;
// Use this line to figure out any error generated during the process
echo $yahoo->errorInfo;
function dump($var)
{
echo "<pre>";
print_r($var);
echo "</pre>";
}
?>
 
  
class.GrabYahoo.php

<?php
/*------------------------------------------------------
GrabYahoo - Yahoo Service Grabber class
Version 1.5, Created 05/22/2006, Updated 11/03/2010
Credit for latest fix: Ovidiu
This class is used to grab Yahoo services like
Address Book, Messenger List, Number of New Mails
Copyright (C) 2006 Ehsan Haque
License: GPL
------------------------------------------------------*/
/**
* GrabYahoo - Yahoo Service Grabber class
* @package GrabYahoo
* @license GPL
* @copyright (C) 2006 Ehsan Haque
* @version 1.4
* @created 05/22/2006
* @updated 02/06/2008
* @author Ehsan Haque
*/
class GrabYahoo
{
/*-------------------------------------------------------
Public Variables
-------------------------------------------------------*/
/**
* Service name (1. addressbook, 2. messenger, 3. newmail, 4. calendar)
* @public
* @var string
*/
var $service            = "";
/**
* Yahoo! Account Username
* @public
* @var string
*/
var $login              = "";
/**
* Yahoo! Account Password
* @public
* @var string
*/  
var $password           = "";
/**
* Abosolute path to save the cookie
* Default value is DOCUMENT_ROOT
* @public
* @var string
*/
var $cookieJarPath      = "";
/**
* Abosulte path to the CA Bundle file
* SSL Certificate required to verify CA cert
* Usually required when script ran on Localhost
* Remote servers may not require
* Default value is false
* @public
* @var string
*/
var $caBundleFile       = "";
/**
* Specifies if Proxy server required as Gateaway
* Default value is false
* @public
* @var boolean
*/  
var $isUsingProxy       = false;
/**                     
* Proxy host name      
* @public               
* @var string         
*/                     
var $proxyHost          = "";
/**                     
* Proxy port number     
* @public               
* @var int            
*/                     
var $proxyPort          = 0;
/*-------------------------------------------------------
Private Variables
-------------------------------------------------------*/
/**
* URL to Authenticate user on Yahoo!
* @private
* @var string
*/
var $authUrl            = "http://login.yahoo.com/config/login?";
/**
* URL for the desired Service
* @private
* @var string
*/                          
var $serviceUrl         = "";
/**
* URL to be used by cURL
* @private
* @var string
*/                          
var $url                = "";
/**
* User agent (used to trick Yahoo!)
* @private
* @var string
*/
var $userAgent          = "YahooSeeker-Testing/v3.9 (compatible; Mozilla 4.0; MSIE 5.5; http://search.yahoo.com/)";
/**
* Referer URL (used to trick Yahoo!)
* @private
* @var string
*/
var $referer            = "http://my.yahoo.com";
/**
* Specifies whether output includes the header
* @private
* @var int
*/
var $showHeader         = 0;
/**
* Specifies if cURL should follow the redirected URL
* @private
* @var int
*/
var $follow             = 0;
/**
* Specifies number of post fields to pass
* @private
* @var int
*/                          
var $numPostField       = 0;
/**
* Specify fields to send via POST method as key=value
* @private
* @var string
*/
var $postFields         = "";
/**
* File where output is temporarily saved during authentication
* @private
* @var string
*/
var $authOutputFile     = "";
/**
* Variable used by Yahoo to verify the request is valid
* @private
* @var string
*/
var $crumb              = "";
/**
* File where service output is temporarily saved
* @private
* @var string
*/
var $outputFile         = "";
/**
* File where Cookie is temporarily saved
* @private
* @var string
*/                          
var $cookieFileJar      = "";
/**
* Cookie File that is read by service process
* This carries same value as $cookieFileJar
* @private
* @var string
*/
var $cookieFile         = "";
/**
* Specifies if Cookie is to be in header
* @private
* @var int
*/
var $cookie             = 0;
/**
* Proxy address as proxy.host:port
* @private
* @var string
*/
var $proxy              = "";
/**
* Error Information set by either cURL or Internal process
* @private
* @var string
*/
var $errorInfo          = "";
/**
* Returns true if there is new mail otherwise false
* @private
* @var boolean
*/  
var $newMailStatus      = false;
/**
* Sets Service URL
* @return void
*/
function setServiceUrl()
{
if (empty($this->service))
{
$this->setError("provide_service");
return false;
}
// Sets the URL depending on the choosen service
switch ($this->service)
{
//updated by ovidiuw3b
case 'addressbook' : $this->serviceUrl   = "http://address.mail.yahoo.com/?_src=&VPC=print"; break;
//end update
//updated by ovidiuw3b
case 'messenger'   : $this->serviceUrl   = "http://address.mail.yahoo.com/?_src=&VPC=print"; break;
//end update
case 'newmail'     : $this->serviceUrl   = "http://mail.yahoo.com/"; break;
case 'calendar'    : $this->serviceUrl   = "http://calendar.yahoo.com/"; break;
}
}
/**
* Sets the Cookie Jar File where Cookie is temporarily saved
* @return void
*/
function setCookieJar()
{
// Sets the encrypted cookie filename using Yahoo! account username
$this->cookieFilename = MD5($this->login);
// Sets the Cookie Jar filename with an absolute path
$this->cookieFileJar  = (!empty($this->cookieJarPath)) ? $this->cookieJarPath . "/" . $this->cookieFilename : $_SERVER['DOCUMENT_ROOT'] . "/" . $this->cookieFilename;
fopen($this->cookieFileJar, "w");
}
/**
* Initializes cURL session
* @return void
*/  
function initCurl()
{
$this->curlSession    = curl_init();
}
/**
* Sets cURL options
* @return boolean
*/  
function setCurlOption()
{
// Sets the User Agent  
curl_setopt($this->curlSession, CURLOPT_USERAGENT, $this->userAgent);
// Sets the HTTP Referer
curl_setopt($this->curlSession, CURLOPT_REFERER, $this->referer);
// Sets the URL that PHP will fetch using cURL
curl_setopt($this->curlSession, CURLOPT_URL, $this->url);
// Sets the number of fields to be passed via HTTP POST
curl_setopt($this->curlSession, CURLOPT_POST, $this->numPostField);
// Sets the fields to be sent via HTTP POST as key=value
curl_setopt($this->curlSession, CURLOPT_POSTFIELDS, $this->postFields);
// Sets the filename where cookie information will be saved
curl_setopt($this->curlSession, CURLOPT_COOKIEJAR, $this->cookieFileJar);
// Sets the filename where cookie information will be looked up
curl_setopt($this->curlSession, CURLOPT_COOKIEFILE, $this->cookieFile);
// Sets the option to set Cookie into HTTP header
curl_setopt($this->curlSession, CURLOPT_COOKIE, $this->cookie);
// Checks if the user needs proxy (to be set by user)
if ($this->isUsingProxy)
{
// Checks if the proxy host and port is specified
if ((empty($this->proxyHost)) || (empty($this->proxyPort)))
{
$this->setError("proxy_required");
$this->unlinkFile($this->cookieFileJar);
return false;
}
// Sets the proxy address as proxy.host:port
$this->proxy          = $this->proxyHost . ":" . $this->proxyPort;
}
// Sets the proxy server as proxy.host:port
curl_setopt($this->curlSession, CURLOPT_PROXY, $this->proxy);
// Sets the filename where output will be temporarily saved
curl_setopt($this->curlSession, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($this->curlSession, CURLOPT_FOLLOWLOCATION, $this->follow);
return true;
}
/**
* Executes the Service
* @param string $login Username of user's Yahoo! Account
* @param string $password Password of the user's Yahoo! Account
* @return array|false
*/  
function execService($login, $password)
{
$login      = trim($login);
$password   = trim($password);
if (empty($login))
{
$this->setError("provide_login");
return false;
}
if (empty($password))
{
$this->setError("provide_pass");
return false;
}
$this->login      = $login;
$this->password   = $password;
$this->setServiceUrl();
// Instructs to authenticate user on Yahoo!
$this->auth       = $this->doAuthentication();
if ($this->auth)
{
// Instructs to fetch output if Authenticated
$this->getServiceOutput();
return $this->serviceOutput;
}
}
/**
* Authenticates user on Yahoo!
* @return boolean
*/
function doAuthentication()
{
// Instructs to initialize cURL session
$this->initCurl();
// Sets the URL for authentication purpose
$this->url              = $this->authUrl;
// Sets the number of fields to send via HTTP POST
$this->numPostField     = 22;
// Sets the fields to be sent via HTTP POST as key=value
$this->postFields       = "login=$this->login&passwd=$this->password&.src=&.tries=5&.bypass=&.partner=&.md5=&.hash=&.intl=us&.tries=1&.challenge=ydKtXwwZarNeRMeAufKa56.oJqaO&.u=dmvmk8p231bpr&.yplus=&.emailCode=&pkg=&stepid=&.ev=&hasMsgr=0&.v=0&.chkP=N&.last=&.done=" . $this->serviceUrl;
// Instructs to set Cookie Jar
$this->setCookieJar();
// Checks if the cURL options are all set properly
if ($this->setCurlOption())
{
// Instructs to execute cURL session
$this->execCurl();
// Checks if any cURL error is generated
if ($this->getCurlError())
{
$this->unlinkFile($this->cookieFileJar);
$this->setError("curl_error");
return false;
}
// Checks if the authentication failed, either invalid login or username is not registered
if ((preg_match("/invalid/i", $this->outputContent)) || (preg_match("/not yet taken/i", $this->outputContent)))
{
// Instructs to close cURL session
$this->closeCurl();
// Unlinks the cookie file
$this->unlinkFile($this->cookieFileJar);
$this->setError("invalid_login");
return false;
}
$this->closeCurl();
}
unset($this->outputContent);
return true;
}
/**
* Sets the Service Output
* @return void
*/  
function getServiceOutput()
{  
// Instructs to process the choosen service
switch ($this->service)
{
case 'addressbook'    : $this->showHeader     = 0;
$this->getCrumb();
$this->serviceOutput  = $this->processAddressBook();
break;
case 'messenger'      : $this->showHeader     = 0;
$this->getCrumb();      
$this->serviceOutput  = $this->processMessengerList();
break;
case 'newmail'        : $this->showHeader     = 0;
$this->follow         = 1;
$this->serviceOutput  = $this->processNewMail();
break;
case 'calendar'       : $this->showHeader     = 0;
$this->serviceOutput  = $this->processCalendar();
break;
}
$this->unlinkFile($this->cookieFileJar);
}
/**
* Processes Yahoo! Address Book
* @return array|false
*/
function processAddressBook()
{
$this->initCurl();
$this->url              = $this->serviceUrl;
$this->numPostField     = 1;
//updated by ovidiuw3b
$this->postFields= "VPC=print&field[allc]=1&field[catid]=0&field[style]=>detailed&submit[action_display]=Display for Printing";
//end update
$this->cookieFile       = $this->cookieFileJar;
$this->outputFile       = "addressBook." . md5($this->login) . ".txt";
$this->fileHandler      = fopen($this->outputFile, "w");
if ($this->setCurlOption())
{
$this->execCurl();
$res=$this->outputContent;
$this->closeCurl();
$emailA=array();$bulk=array();$contacts=array();
$res=str_replace(array('  ','',PHP_EOL,"\n","\r\n"),array('','','','',''),$res);
preg_match_all("#\<tr class\=\"phead\"\>\<td colspan\=\"2\"\>(.+)\<\/tr\>(.+)\<div class\=\"first\"\>\<\/div\>\<div\>\<\/div\>(.+)\<\/div\>#U",$res,$bulk);
if (!empty($bulk))
{
foreach($bulk[1] as $key=>$bulkName)
{
$nameFormated=trim(strip_tags($bulkName));
if (preg_match('/\&nbsp\;\-\&nbsp\;/',$nameFormated))
{
$emailA=explode('&nbsp;-&nbsp;',$nameFormated);
if (!empty($emailA[1])) $contacts[$emailA[1].'@yahoo.com']=array('first_name'=>$emailA[0],'email_1'=>$emailA[1].'@yahoo.com');
}
elseif (!empty($bulk[3][$key])) { $email=strip_tags(trim($bulk[3][$key])); $contacts[$email]=array('first_name'=>$nameFormated,'email_1'=>$email); }
}
}
foreach ($contacts as $email=>$name) if (!$this->isEmail($email)) unset($contacts[$email]);
return $contacts;
}   
}
/**
* Locates and sets the value for crumb
* @return void
*/  
function getCrumb()
{
$this->initCurl();
$this->url              = $this->serviceUrl . "?1&VPC=import_export&.rand=1238474830";
$this->cookieFile       = $this->cookieFileJar;
$this->outputFile       = "addressBook." . md5($this->login) . ".txt";
$this->fileHandler      = fopen($this->outputFile, "w");
if ($this->setCurlOption())
{
$this->execCurl();
fwrite($this->fileHandler, $this->outputContent);      
unset($this->outputContent);
$this->closeCurl();
fclose($this->fileHandler);   
$fileContent          = file_get_contents($this->outputFile);
$searchStr            = "/\.crumb.*\"/";
preg_match($searchStr, $fileContent, $matches);
if (!empty($matches))
{
$foundStr           = $matches[0];
$pattern            = array (
'/id/', '/(\.?)crumb(\d?)/', '/value/', '/=/', '/\"/'
);
$replacement        = array (
'', '', '', '', ''
);
$this->crumb        = preg_replace($pattern, $replacement, $foundStr);
}
$this->unlinkFile($this->outputFile);
}
}
/**
* Processes Yahoo! Messenger Friend List (Grouped)
* @return array|false
*/  
function processMessengerList()
{
$this->initCurl();
$this->url              = $this->serviceUrl;
$this->numPostField     = 1;
//updated by ovidiuw3b
$this->postFields= "VPC=print&field[allc]=1&field[catid]=0&field[style]=>detailed&submit[action_display]=Display for Printing";
//end update
$this->cookieFile       = $this->cookieFileJar;
$this->outputFile       = "addressBook." . md5($this->login) . ".txt";
$this->fileHandler      = fopen($this->outputFile, "w");
if ($this->setCurlOption())
{
$this->execCurl();
$res=$this->outputContent;
$this->closeCurl();
$emailA=array();$bulk=array();$contacts=array();
$res=str_replace(array('  ','',PHP_EOL,"\n","\r\n"),array('','','','',''),$res);
preg_match_all("#\<tr class\=\"phead\"\>\<td colspan\=\"2\"\>(.+)\<\/tr\>(.+)\<div class\=\"first\"\>\<\/div\>\<div\>\<\/div\>(.+)\<\/div\>#U",$res,$bulk);
if (!empty($bulk))
{
foreach($bulk[1] as $key=>$bulkName)
{
$nameFormated=trim(strip_tags($bulkName));
if (preg_match('/\&nbsp\;\-\&nbsp\;/',$nameFormated))
{
$emailA=explode('&nbsp;-&nbsp;',$nameFormated);
if (!empty($emailA[1])) $contacts[$emailA[1].'@yahoo.com']=array('first_name'=>$emailA[0],'messenger_id'=>$emailA[1]);
}
elseif (!empty($bulk[3][$key])) { $email=strip_tags(trim($bulk[3][$key])); $contacts[$email]=array('first_name'=>$nameFormated,'messenger_id'=>$email); }
}
}
foreach ($contacts as $email=>$name) if (!$this->isEmail($email)) unset($contacts[$email]);
return $contacts;
}   
}  
/**
* Processes Yahoo! Mail for Number of New Messages
* @return array|false
*/  
function processNewMail()
{
$this->initCurl();
$this->url              = $this->serviceUrl;
$this->cookieFile       = $this->cookieFileJar;
$this->outputFile       = "newMailList." . md5($this->login) . ".txt";
$this->fileHandler      = fopen($this->outputFile, "w");
if ($this->setCurlOption())
{
$this->execCurl();
fwrite($this->fileHandler, $this->outputContent);
unset($this->outputContent);
$this->closeCurl();
fclose($this->fileHandler);
$fileContent  = file_get_contents($this->outputFile);
$fileContent  = strip_tags($fileContent);
// Finds out the string You have N unread Message
$pattern      = "/inbox\s\(\d+\)/i";
preg_match($pattern, $fileContent, $match);
// Extracts the number of new message(s)
$numPattern   = "/\d+/";
preg_match($numPattern, $match[0], $match);
$list['new_mail']   = $match[0];
$this->unlinkFile($this->outputFile);
if ($match[0] > 0)
{
$this->setNewMailStatus(true);
}
return $list;
}
}
/**
* Processes Yahoo! Calendar
* @return array|false
*/
function processCalendar()
{
$this->initCurl();
$this->url              = $this->serviceUrl;
$this->url             .= "YYY,dbadeb/srt,0/Yahoo.csv?v=12&Yahoo.csv";
$this->cookieFile       = $this->cookieFileJar;
$this->outputFile       = "calendar." . md5($this->login) . ".txt";
$this->fileHandler      = fopen($this->outputFile, "w");
if ($this->setCurlOption())
{
$this->execCurl();
fwrite($this->fileHandler, $this->outputContent);      
unset($this->outputContent);
$this->closeCurl();
fclose($this->fileHandler);
// Sets the service output as a string
$fileContent          = file_get_contents($this->outputFile);
// Sets patterns and respective replacement strings to convert the output to a proper CSV format
$pattern              = array (
"/;\"\"\"/",
"/;\"\"/",
"/\"\"/",
"/;\":\"/",
"/;/"
);
$replacement          = array (
";\"\"|\"",
";\":\"",
"\"|\"",
";\"\"",
","
);
$fileContent          = preg_replace($pattern, $replacement, $fileContent);
// Sets the formatted output as an array
$fileContentArr       = explode("|", $fileContent);
// Sets the calendar column headings
$clColumnHeadLine     = trim($fileContentArr[0]);
$clColumnHeadLine     = str_replace("\"", "", $clColumnHeadLine);
// Sets the calendar column headings into an array
$clColumnHeadArr      = explode(",", $clColumnHeadLine);
// Unsets the heading line from the file content array
unset($fileContentArr[0]);
foreach ($fileContentArr as $key => $value)
{
// Sets the calendar list individually
$listColumnLine     = trim($value);
$listColumnLine     = str_replace("\"", "", $listColumnLine);
// Sets the individual list into an array
$listColumnArr      = explode(",", $listColumnLine);
// Iterates through each item of individual calendar item in the list
foreach ($listColumnArr as $listColumnKey => $listColumnValue)
{
// Sets the column heading as key
$listKey          = $clColumnHeadArr[$listColumnKey];
// Sets the value for the key respectively
$list_[$listKey]  = $listColumnValue;
}
// Sets the calendar list in an array
$list[]             = $list_;
}
$this->unlinkFile($this->outputFile);
return $list;      
}   
}
/**
* Sets the new mail status to true or false
* @return void
*/  
function setNewMailStatus($status)
{
$this->newMailStatus = ($status) ? true : false;
}
/**
* Returns the new mail status
* @return boolean
*/
function getNewMailStatus()
{
return $this->newMailStatus;
}
/**
* Executes cURL Session
* @return void
*/  
function execCurl()
{
$this->outputContent    = curl_exec($this->curlSession);  
}
/**
* Closes cURL session
* @return void
*/  
function closeCurl()
{
curl_close($this->curlSession);
unset($this->curlSession);
}
/**
* Unlinks any given file
* @return void
*/  
function unlinkFile($fileToUnlink)
{
if (file_exists($fileToUnlink))
{
unlink($fileToUnlink);
}
}
/**
* Sets any cURL error generated
* @return boolean
*/  
function getCurlError()
{
$this->curlError    = curl_error($this->curlSession);
return (!empty($this->curlError)) ? true : false;
}
/**
* Sets Error Information
* @return void
*/  
function setError($error)
{
$msg  = (!empty($error)) ? $this->getErrorInfo($error) : null;
$this->errorCount++;
$this->errorInfo = $msg;
}
/**
* Provides the Error message
* @param string $error Error code for which error message is generated
* @return string
*/  
function getErrorInfo($error)
{
switch ($error)
{
case 'provide_service'    : $msg  = "Must specify a Service"; break;
case 'provide_login'      : $msg  = "Must provide Login name"; break;
case 'provide_pass'       : $msg  = "Must provide Password"; break;
case 'provide_ca'         : $msg  = "Must provide a SSL Certificate to verfiy CA cert"; break;
case 'proxy_required'     : $msg  = "Must provide both Proxy host and port"; break;
case 'invalid_login'      : $msg  = "Login information incorrect"; break;
case 'curl_error'         : $msg  = $this->curlError; break;
}
return $msg;
}
/*added by ovidiuw3b*/
function isEmail($email)
{
return preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/i", $email);
}
/*end code added by ovidiuw3b*/  
}
?>
 
  其实他们都有api可以使用,参考如下:
  gmail:
  http://www.9lessons.info/2011/06/import-gmail-contacts-google-oauth.html
  yahoo:
  http://developer.yahoo.com/addressbook/
  http://developer.yahoo.com/blogs/ydn/posts/2008/09/getting_started/

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-360020-1-1.html 上篇帖子: 22 Open Source PHP Frameworks To Shorten Your Development Time 下篇帖子: 半小时精通PHP正则表达式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表