J'ai un grattoir très simple maintenant fait ce dont j'ai besoin, mais il est très lent il gratte 2 photos en 3 secondes ce que je dois faire est d'au moins 1000 photos en quelques secondes.CURL multi-threadé avec SSL et redirection
Voici le code que j'utilise maintenant
<?php
require_once('config.php');
//Calling PHasher class file.
include_once('classes/phasher.class.php');
$I = PHasher::Instance();
//Prevent execution timeout.
set_time_limit(0);
//Solving SSL Problem.
$arrContextOptions=array(
"ssl"=>array(
"verify_peer"=>false,
"verify_peer_name"=>false,
),
);
//Check if the database contains hashed pictures or if it's empty, Then start from the latest hashed picture or start from 4.
$check = mysqli_query($con, "SELECT fid FROM images ORDER BY fid DESC LIMIT 1;");
if(mysqli_num_rows($check) > 0){
$max_fid = mysqli_fetch_row($check);
$fid = $max_fid[0]+1;
} else {
$fid = 4;
}
$deletedProfile = "https://z-1-static.xx.fbcdn.net/rsrc.php/v2/yo/r/UlIqmHJn-SK.gif";
//Infinte while loop to fetch profiles pictures and save them inside avatar folder.
$initial = $fid;
while($fid = $initial){
$url = 'https://graph.facebook.com/'.$fid.'/picture?width=378&height=378';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // follow the redirects
curl_setopt($ch, CURLOPT_HEADER, false); // no needs to pass the headers to the data stream
curl_setopt($ch, CURLOPT_NOBODY, true); // get the resource without a body
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // accept any server certificate
curl_exec($ch);
// get the last used URL
$lastUrl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
curl_close($ch);
if($lastUrl == $deletedProfile){
$initial++;
}else{
$imageUrl = file_get_contents($url, false, stream_context_create($arrContextOptions));
$savedImage = dirname(__file__).'/avatar/image.jpg';
file_put_contents($savedImage, $imageUrl);
//Exclude deleted profiles or corrupted pictures.
if(getimagesize($savedImage) > 0){
//PHasher class call to hash the images to hexdecimal values or binary values.
$hash = $I->FastHashImage($savedImage);
$hex = $I->HashAsString($hash);
//Store Facebook id and hashed values for the images in hexa values.
mysqli_query($con, "INSERT INTO images(fid, hash) VALUES ('$fid', '$hex')");
$initial++;
} else {
$initial++;
}
}
}
?>
je ne figure pas comment le faire, mais ce que je pense est maintenant:
1- Diviser en 1000 profils pour chaque bouclez et stockez-les dans un tableau.
$items = array();
for($i=$fid; $i <= $fid+1000; $i++){
$url = 'https://graph.facebook.com/'.$i.'/picture?width=378&height=378';
$items[$i] = array($url);
}
mais les résultats sont incorrects Je veux savoir comment réparer la sortie de la matrice.
Array ([28990] => Array ([0] => https://graph.facebook.com/28990/picture?width=378&height=378)
[28991] => Array ([0] => https://graph.facebook.com/28991/picture?width=378&height=378)
[28992] => Array ([0] => https://graph.facebook.com/28992/picture?width=378&height=378)
[28993] => Array ([0] => https://graph.facebook.com/28993/picture?width=378&height=378)
[28994] => Array ([0] => https://graph.facebook.com/28994/picture?width=378&height=378)
[28995] => Array ([0] => https://graph.facebook.com/28995/picture?width=378&height=378)
[28996] => Array ([0] => https://graph.facebook.com/28996/picture?width=378&height=378)
[28997] => Array ([0] => https://graph.facebook.com/28997/picture?width=378&height=378)
2- Ensuite, je souhaite utiliser la matrice de sortie à l'intérieur de boucle Mulit, permet le traitement de plusieurs poignées cURL de façon asynchrone.
3- Vérifiez les URL de sortie si elles sont égales au profil supprimé si elles ne le transmettent pas pour être converties en valeur de hachage à l'aide de PHasher et stockez-les dans le DB.
Merci, il travaille, mais pouvez-vous me dire comment enregistrer cette sortie de la boucle comme un tableau, il économise comme un élément du tableau seulement [0] – Jadolyo
Que voulez-vous dire enregistrer comme un tableau? Collectez simplement vos URL dans un tableau et faites une boucle dans ce tableau en passant chaque URL à $ pcurl-> startRequest. Voir ceci: http://pastebin.com/rMJG1QjC. Exécutez ceci (avec la classe ici) en ligne de commande et vous remarquerez que les téléchargements peuvent ne pas être en ordre car ils ne sont pas sauvegardés en séquence mais en parallèle –