SEO Tools

All rights reserved.
You can find me at:

https://www.youtube.com/c/NetgrowsES
*/
/********************************************************************************/
/*
debugSearchDisplay can be true or false. If true, it will allow you to see search results in your screen (not recommended, only for debugging).
debugSearchDisplay puede ser true o false. En true, te mostrará los resultados de Google directamente en pantalla (no recomendado, solo para debug).
*/
$debugSearchDisplay=false;
/********************************************************************************/
/*
WARNING – AVISO
ENGLISH: DO NOT TOUCH ANYTHING BELOW THIS POINT UNLESS YOU KNOW WHAT YOU ARE DOING!
SPANISH: ¡NO TOQUES NADA DEBAJO DE ESTA ZONA A MENOS QUE SEPAS LO QUE ESTÁS HACIENDO!
*/
/************************************************************************************/
$phpseoVersion=”2.0″;
if (isset($_POST[‘query’])) $query = $_POST[‘query’];
else $query =””;
if (isset($_POST[‘pagina’])) $pagina = $_POST[‘pagina’];
else $pagina =”1″;
if (isset($_POST[‘optionz’])) $optionz = $_POST[‘optionz’];
else $optionz =””;
if (isset($_POST[‘googleRegion’])) $googleRegion = $_POST[‘googleRegion’];
else $googleRegion =””;
if (isset($_POST[‘webproxy’])) $webproxy = $_POST[‘webproxy’];
else $webproxy =”noproxy”;
if (isset($_GET[‘module’])) $module = $_GET[‘module’];
else $module =””;
if (isset($_POST[‘lang’])) $lang = $_POST[‘lang’];
else $lang =””;
if (isset($_POST[‘mainkwsuggest’])) $mainkwsuggest = $_POST[‘mainkwsuggest’];
else $mainkwsuggest =””;
if (isset($_POST[‘kwsugPlatform’])) $kwsugPlatform = $_POST[‘kwsugPlatform’];
else $kwsugPlatform =””;
if (isset($_POST[‘kwAtTheEnd’])) $kwAtTheEnd = $_POST[‘kwAtTheEnd’];
else $kwAtTheEnd =””;
if (isset($_POST[‘imagequery’])) $imagequery = $_POST[‘imagequery’];
else $imagequery =””;
if (isset($_POST[‘imagesToDownload’])) $imagesToDownload = $_POST[‘imagesToDownload’];
else $imagesToDownload =””;
if (isset($_POST[‘plagichecktext’])) $plagichecktext = $_POST[‘plagichecktext’];
else $plagichecktext =””;
if (isset($_POST[‘indexedcheckURLs’])) $indexedcheckURLs = $_POST[‘indexedcheckURLs’];
else $indexedcheckURLs =””;
if ($module==”lastnews”){
$totalNotificaciones = file_get_contents(‘https://netgrows.com/notifications/total.php’, true);
setcookie( “seenNotifications”, $totalNotificaciones, time() + (10 * 365 * 24 * 60 * 60) );
}
/*Initialize*/
if (!file_exists(“content-extractor-templates.txt”)) file_put_contents(‘content-extractor-templates.txt’, ‘Template Woo Product@@@product_title######@@@product_description######

‘.”n”.’Template Yahoo News@@@news_title###

###

@@@news_body######

@@@news_date######‘.”n”.’Template Reddit@@@post_title######@@@post_description###RichTextJSON-root”>###

‘.”n”.’Template Amazon.com@@@product_title######@@@product_description######

‘);
if (!file_exists(“web-proxy-list.txt”)) file_put_contents(‘web-proxy-list.txt’, ‘Sample 1@@@https://mydomain2.com/test/phpseo-proxy.php?password=YOURPASSWORDHERE’.”n”.’Sample 2@@@https://mydomain3.com/phpseo-proxy.php?password=YOURPASSWORDHERE’);
if (!file_exists(“footprints.txt”)) file_put_contents(‘footprints.txt’, ‘Site@@@site:yourdomain.com’.”n”.’Intext@@@intext:yourkeyword’.”n”.’Allintext@@@allintext:yourkeyword’.”n”.’Allintitle@@@allintitle:yourkeyword’.”n”.’Inurl@@@inurl:yourkeyword’.”n”.’Allinurl@@@allinurl:yourkeyword’.”n”.’Filetype@@@filetype:pdf’.”n”.’OR@@@OR keyword’.”n”.’AND@@@AND keyword’.”n”.’AROUND(X)@@@AROUND(12) youkeyword’.”n”.’FB pages@@@site:facebook.com+inurl:about’.”n”.’FB groups@@@site:facebook.com/groups’.”n”.’FB photos@@@site:facebook.com+inurl:photos’.”n”.’TW tweets@@@site:twitter.com+inurl:status’.”n”.’IG posts@@@site:instagram.com/p’.”n”.’YT videos@@@site:youtube.com+inurl:watch’.”n”.’Yahoo news@@@site:news.yahoo.com inurl:html’.”n”.’Amazon products@@@site:amazon.com inurl:/dp/’.”n”.’Web forums@@@inurl:forums+OR+intitle:forums+OR+intitle:foro’.”n”.’Disqus comments@@@%22Powered+by+Disqus%22′.”n”.’Facebook comments@@@%22facebook+comments+plugin%22′.”n”.’Blogspot comments@@@site:blogspot.com+inurl:html’.”n”.’Wordpress comments@@@%22powered+by+wordpress%22+AND+%22leave+a+reply%22′.”n”.’Wordpress.com comments@@@site:wordpress.com+%22introduce+tu+comentario%22+OR+%22enter+your+comment%22′);
/*Initialize extension, saves path if exist*/
$file = “phpseo_chrome_extension/content.js”;
if (file_exists($file)){
$lines = file($file);
$actual_link = “http://$_SERVER[HTTP_HOST]/”; //.strtok($_SERVER[“REQUEST_URI”], ‘?’)
$add_info = “var phpSeoPath=’$actual_link’; var phpSeoPathComplete=’http://$_SERVER[HTTP_HOST]”.dirname($_SERVER[‘PHP_SELF’]).”/’; n”;
if ($lines[0] != $add_info) {
$lines[0] = $add_info;
file_put_contents($file, $lines);
}
}
if (!file_exists(‘data-extractor’)) {
mkdir(‘data-extractor’, 0777, true);
}
if (!file_exists(“config.txt”)) {
$langConfig = substr($_SERVER[‘HTTP_ACCEPT_LANGUAGE’], 0, 2);
if ($langConfig==”es”) $langToSave=”es”;
else $langToSave=”en”;
$howManyURLPerStep=3;
$batchDelaySeconds=20;
$searchDelaySeconds=15;
$customUserAgent=”Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36″;
file_put_contents(‘config.txt’, “lang=$langToSave”.”n”.”howManyURLPerStep=$howManyURLPerStep”.”n”.”batchDelaySeconds=$batchDelaySeconds”.”n”.”searchDelaySeconds=$searchDelaySeconds”.”n”.”customUserAgent=$customUserAgent”);
$langSelected=$langConfig;
} else {
/*Read config*/
$configVars = file_get_contents(‘config.txt’, true);
$arrayVars = explode(“n”,$configVars);
foreach ($arrayVars as $varconfig){
$partesVar = explode(“=”,$varconfig);
if (trim($partesVar[0])==”lang”) $langSelected=trim($partesVar[1]);
if (trim($partesVar[0])==”howManyURLPerStep”) $howManyURLPerStep=trim($partesVar[1]);
if (trim($partesVar[0])==”batchDelaySeconds”) $batchDelaySeconds=trim($partesVar[1]);
if (trim($partesVar[0])==”searchDelaySeconds”) $searchDelaySeconds=trim($partesVar[1]);
if (trim($partesVar[0])==”customUserAgent”) $customUserAgent=trim($partesVar[1]);
}
}
if (!file_exists(“search.json”)) file_put_contents(‘search.json’, “”);
//LOCAL API FOR TIMEOUT
/*
$domainFromURL = $_GET[‘domainFromURL’];
if ($domainFromURL) {
echo gethostbyname($domainFromURL);
exit;
}
*/
/******************/
/*PROXY GENERATOR*/
/****************/
if ($module==”proxygenerator”) {
if (isset($_GET[‘passNewProxy’])) $passNewProxy = $_GET[‘passNewProxy’];
else echo “ERROR, NO PASSWORD”;
$output=’
your php.”);
$w = “http://suggestqueries.google.com/complete/search?output=toolbar&hl=$lang&lr=lang_$lang&pws=0&gl=us&gws_rd=cr&q=”.$k;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $w);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$aux=utf8_encode(curl_exec($ch));
$xml = @simplexml_load_string($aux);
curl_close($ch);
if ($xml){
$result = $xml->xpath(“//@data”);
$ar = array();
foreach($result as $key => $value) {
$ar[] = (string)$value;
}
return $ar;
} else return false;
}
function youtubeSuggestKeywords2($k, $lang) {
if (!function_exists(“curl_init”)) die(“youtubeSuggestKeywords needs CURL module, please install CURL on your php.”);
$w = “https://clients1.google.com/complete/search?client=youtube&output=toolbar&gs_ri=youtube&ds=yt&hl=$lang&lr=lang_$lang&q=”.$k;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $w);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$content=utf8_encode(curl_exec($ch));
$arr_items = preg_split( ‘/(],[|”,[[“)/’, $content ); //Split and put it in arrary
foreach($arr_items as $items)
{ $arr_item=explode(“,”,$items);
$key=$arr_item[0]; //Get the keyword, the arrary will have other details such as no.of resutls also.
$key=trim($key,”””); //Use to remove quotes
if (strpos($key, “window.google.ac.h”) === false) {
if( strpos( $key, “<" ) === false ) { echo $key; echo "n"; } } } curl_close($ch); } function amzSuggestKeywords2($k, $lang) { if (!function_exists("curl_init")) die("amzSuggestKeywords needs CURL module, please install CURL on your php."); $k=urlencode($k); $w = "https://completion.amazon.com/search/complete?search-alias=aps&client=amazon-search-ui&mkt=1&q=".$k; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $w); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $content=utf8_encode(curl_exec($ch)); $contentArray=explode(",",$content); //delete last and first array elements (trash) unset($contentArray[count($contentArray)-1]); unset($contentArray[0]); foreach ($contentArray as $element){ $elementClean = str_replace(array(']','[','}','{','"',':'), "", $element); if ((!empty($elementClean))&&(strlen($elementClean)>=4)) echo utf8_decode($elementClean).”n”;
}
curl_close($ch);
}
$query=$searchPageStarts=$googleRegion=””;
if (isset($_GET[“query”])) $query=urlencode($_GET[“query”]);
if (isset($_GET[“searchPageStarts”])) $searchPageStarts=$_GET[“searchPageStarts”];
if (isset($_GET[“googleRegion”])) $googleRegion=$_GET[“googleRegion”];
if ((isset($querysug))&&($querysug!=””)) {
foreach(range(“a”,”z”) as $i){
if ($kwAtTheEnd==”kwatend”) {
$keyCombo=urlencode(“$i $querysug”).”&cp=1″;
} else $keyCombo=urlencode(“$querysug $i”);
$arraysug = googleSuggestKeywords2(“$keyCombo”, $lang);
if (is_array($arraysug) || is_object($arraysug)) {
foreach ($arraysug as &$value) {
if (!empty($value)) {
echo $value;
if(end($arraysug)!=$value) echo “n”;
}
}
}
}
}
if ((isset($querysugYT))&&($querysugYT!=””)) {
foreach(range(“a”,”z”) as $i){
if ($kwAtTheEnd==”kwatend”) {
$keyCombo=urlencode(“$i $querysugYT”).”&cp=1″;
} else $keyCombo=urlencode(“$querysugYT $i”);
$arraysug = youtubeSuggestKeywords2(“$keyCombo”, $lang);
if (is_array($arraysug) || is_object($arraysug)) {
foreach ($arraysug as &$value) {
if (!empty($value)) {
echo $value;
if(end($arraysug)!=$value) echo “n”;
}
}
}
}
}
if ((isset($querysugAZ))&&($querysugAZ!=””)) {
foreach(range(“a”,”z”) as $i){
$arraysug = amzSuggestKeywords2(“$querysugAZ $i”, $lang);
if (is_array($arraysug) || is_object($arraysug)) {
foreach ($arraysug as &$value) {
if (!empty($value)) {
echo $value;
if(end($arraysug)!=$value) echo “n”;
}
}
}
}
}
if ((($query!=””)&&($searchPageStarts!=””)&&($googleRegion!=””))||($tbm!=””)) {
if ($tbm==”isch”) { //image search
$getcontents=”https://$googleRegion/search?q=$query&tbm=isch”;
} else $getcontents=”https://$googleRegion/search?q=$query&ion=0&num=100&start=$searchPageStarts”;
$results = getPageGoogle2(“”,$getcontents, “”, “‘.$customUserAgent.'”, 1, 25);
echo $arraydatos=$results[“EXE”];
}
if ($getPage!=””) {
$results = getPageGoogle2(“”,$getPage, “”, “‘.$customUserAgent.'”, 1, 25);
echo $arraydatos=$results[“EXE”];
}
/*END PROXY CODE*/
?>
‘;
$file = “phpseo-proxy.php”;
$txt = fopen($file, “w”) or die(“Unable to open file!”);
fwrite($txt, $output);
fclose($txt);
header(‘Content-Description: File Transfer’);
header(‘Content-Disposition: attachment; filename=’.basename($file));
header(‘Expires: 0’);
header(‘Cache-Control: must-revalidate’);
header(‘Pragma: public’);
header(‘Content-Length: ‘ . filesize($file));
header(“Content-Type: text/plain”);
readfile($file);
exit;
}
session_start();
function getPageGoogle($proxy, $url, $referer, $agent, $header, $timeout) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_COOKIEFILE, “/tmp/cookie.txt”);
curl_setopt($ch, CURLOPT_REFERER, “https://twitter.com/”);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_ENCODING, “”);
//$fp = fopen(dirname(__FILE__).’/curllogs.txt’, ‘a’);
//curl_setopt($ch, CURLOPT_VERBOSE, 1);
//curl_setopt($ch, CURLOPT_STDERR, $fp);
$result[‘EXE’] = curl_exec($ch);
$result[‘INF’] = curl_getinfo($ch);
$result[‘ERR’] = curl_error($ch);
curl_close($ch);
return $result;
}
function googleSuggestKeywords($k, $lang) {
if (!function_exists(“curl_init”)) die(“googleSuggestKeywords needs CURL module, please install CURL on your php.”);
$w = “http://suggestqueries.google.com/complete/search?output=toolbar&hl=$lang&lr=lang_$lang&pws=0&gl=us&gws_rd=cr&q=”.$k;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $w);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$aux=utf8_encode(curl_exec($ch));
$xml = @simplexml_load_string($aux);
curl_close($ch);
if ($xml){
// Parse the keywords
$result = $xml->xpath(‘//@data’);
$ar = array();
foreach($result as $key => $value) {
$ar[] = (string)$value;
}
return $ar;
} else return false;
}
function youtubeSuggestKeywords($k, $lang) {
if (!function_exists(“curl_init”)) die(“youtubeSuggestKeywords needs CURL module, please install CURL on your php.”);
$w = “https://clients1.google.com/complete/search?client=youtube&output=toolbar&gs_ri=youtube&ds=yt&hl=$lang&lr=lang_$lang&q=”.$k;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $w);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$content=utf8_encode(curl_exec($ch));
$arr_items = preg_split( ‘/(],[|”,[[“)/’, $content ); //Split and put it in arrary
foreach($arr_items as $items)
{ $arr_item=explode(“,”,$items);
$key=$arr_item[0]; //Get the keyword, the arrary will have other details such as no.of resutls also.
$key=trim($key,”””); //Use to remove quotes
if (strpos($key, ‘window.google.ac.h’) === false) {
if( strpos( $key, “<" ) === false ) { echo $key; echo "n"; } } } curl_close($ch); } function amzSuggestKeywords($k, $lang) { if (!function_exists("curl_init")) die("amzSuggestKeywords needs CURL module, please install CURL on your php."); $k=urlencode($k); $w = "https://completion.amazon.com/search/complete?search-alias=aps&client=amazon-search-ui&mkt=1&q=".$k; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $w); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $content=utf8_encode(curl_exec($ch)); $contentArray=explode(",",$content); //delete last and first array elements (trash) unset($contentArray[count($contentArray)-1]); unset($contentArray[0]); foreach ($contentArray as $element){ $elementClean = str_replace(array(']','[','}','{','"',':'), "", $element); if ((!empty($elementClean))&&(strlen($elementClean)>=4)) echo utf8_decode($elementClean).”n”;
}
curl_close($ch);
}
function get_subscriber($channel,$use = “user”) {
(int) $subs = 0;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,”https://www.youtube.com/”.$use.”/”.$channel.”/about?disable_polymer=1″);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_POST, 0 );
curl_setopt($ch, CURLOPT_REFERER, ‘https://www.youtube.com/’);
curl_setopt($ch, CURLOPT_USERAGENT, ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0’);
$result = curl_exec($ch);
$R = curl_getinfo($ch);
if($R[“http_code”] == 200) {
$pattern = ‘/”subscriberCountText”:{“simpleText”:”(.*?)}/’;
preg_match($pattern, $result, $matches, PREG_OFFSET_CAPTURE);
$subs = intval(str_replace(‘,’,”,$matches[1][0]));
}
if($subs == 0 && $use == “user”) return get_subscriber($channel,”channel”);
return $subs;
}
function strip_HTML_tags($text)
{
//Delete all between curly braces or parenthesis
$pattern = ‘~(?:(()|([)|({))(?(1)(?>[^()]++|(?R))*))(?(2)(?>[^][]++|(?R))*])(?(3)(?>[^{}]++|(?R))*})~’;
$text= preg_replace($pattern , ”, $text);
//Strips HTML 4.01 start and end tags. Preserves contents.
$text= preg_replace(‘%
# Match an opening or closing HTML 4.01 tag.
BIG|
BLOCKQUOTE|BODY|BR|BUTTON|B|CAPTION|CENTER|CITE|CODE|COL|
COLGROUP|DD|DEL|DFN|DIR|DIV|DL|DT|EM|FIELDSET|FIGURE|FIGCAPTION|FONT|FORM|
FRAME|FRAMESET|Hd|HEAD|HR|HTML|IFRAME|IMG|INPUT|INS|
ISINDEX|I|KBD|LABEL|LEGEND|LI|LINK|MAP|MENU|META|NOFRAMES|
NOSCRIPT|OBJECT|OL|OPTGROUP|OPTION|PARAM|PRE|PATH|P|Q|SAMP|
SCRIPT|SELECT|SMALL|SPAN|STRIKE|STRONG|STYLE|SUB|SUP|SVG|S|
TABLE|TD|TBODY|TEXTAREA|TFOOT|TH|THEAD|TITLE|TR|TT|U|UL|VAR
)b # End group of tag name alternative.
(?: # Non-capture group for optional attribute(s).
s+ # Attributes must be separated by whitespace.
[w-.:]+ # Attribute name is required for attr=value pair.
(?: # Non-capture group for optional attribute value.
s*=s* # Name and value separated by “=” and optional ws.
(?: # Non-capture group for attrib value alternatives.
“[^”]*” # Double quoted string.
| ‘[^’]*’ # Single quoted string.
| [w-.:]+ # Non-quoted attrib value can be A-Z0-9-._:
) # End of attribute value alternatives.
)? # Attribute value is optional.
)* # Allow zero or more attribute=value pairs
s* # Whitespace is allowed before closing delimiter.
/? # Tag may be empty (with self-closing “/>” sequence.
> # Opening tag closing “>” delimiter.
| # Or a (non-SGML compliant) HTML comment.
| ]*> # Or a DOCTYPE.
%six’, ”, $text);
return $text;
}
function validate_email($email) {
// Check email syntax
if(preg_match(‘/^([a-zA-Z0-9._+-]+)@(([?)[a-zA-Z0-9-.]+.([a-zA-Z]{2,7}|[0-9]{1,3})(]?))$/’, $email, $matches)) {
$user = $matches[1];
$domain = $matches[2];
// Check availability of DNS MX records
if(getmxrr($domain, $mxhosts, $mxweight)) {
for($i=0;$i $value) {
foreach ($value as $k => $val) {
for ($i = 0; $i < count($val); $i++) { $result[$i][$k] = $val[$i]; } } } return $result; } function hexColorAllocate($im,$hex){ $hex = ltrim($hex,'#'); $a = hexdec(substr($hex,0,2)); $b = hexdec(substr($hex,2,2)); $c = hexdec(substr($hex,4,2)); return imagecolorallocate($im, $a, $b, $c); } function replace_extension($filename, $new_extension) { $info = pathinfo($filename); return $info['filename'] . '.' . $new_extension; } function transform_image($src, $dist, $dis_width = 100,$quality,$flipImageSelector, $textImageSelector, $addTextoImage, $coordinateX, $coordinateY, $coordinateXwatermark, $coordinateYwatermark,$imageFontSize, $imageFontColor, $textWatermarkSelector,$convertFormat){ $img = ''; $extension = strtolower(strrchr($src, '.')); $angle=0; switch($extension) { case '.jpg': case '.jpeg': $img = @imagecreatefromjpeg($src); break; case '.gif': $img = @imagecreatefromgif($src); break; case '.png': $img = @imagecreatefrompng($src); break; } if ($img != ''){ $width = imagesx($img); $height = imagesy($img); } else return false; if (($width>=1)&&($height>=1)){
$dis_height = $dis_width * ($height / $width);
$new_image = imagecreatetruecolor($dis_width, $dis_height);
//Download initial font, watermark and imagetext.txt creation
if (!file_exists(__DIR__ . “/font.ttf”)) {
$font = file_get_contents(“http://themes.googleusercontent.com/static/fonts/abel/v3/RpUKfqNxoyNe_ka23bzQ2A.ttf”);
file_put_contents(__DIR__ . “/font.ttf”, $font);
}
if (!file_exists(“watermark.png”)) {
$font = file_get_contents(“https://netgrows.com/phpseo/minilogo.png”);
file_put_contents(“watermark.png”, $font);
}
if (!file_exists(“imagetext.txt”)) {
$content=”Line 1 from imagetext.txtnLine 2 from imagetext.txtnLine 3 from imagetext.txtnLine 4 from imagetext.txtnLine 5 from imagetext.txt”;
file_put_contents(“imagetext.txt”, $content);
}
imagecopyresampled($new_image, $img, 0, 0, 0, 0, $dis_width, $dis_height, $width, $height);
if ($flipImageSelector==”fliphorizontal”) imageflip($new_image, IMG_FLIP_HORIZONTAL);
if ($flipImageSelector==”flipvertical”) imageflip($new_image, IMG_FLIP_VERTICAL);
if ($flipImageSelector==”flipboth”) imageflip($new_image, IMG_FLIP_BOTH);
$hexColorAllocate = hexColorAllocate($new_image,$imageFontColor);
if ($textImageSelector==”addaphrase”) imagettftext($new_image, $imageFontSize, $angle, $coordinateX, $coordinateY, $hexColorAllocate, __DIR__ . “/font.ttf”, $addTextoImage);
elseif ($textImageSelector==”addrandomlines”) {
$f_contents = file(“imagetext.txt”);
$line = $f_contents[rand(0, count($f_contents) – 1)];
imagettftext($new_image, $imageFontSize, $angle, $coordinateX, $coordinateY, $hexColorAllocate, __DIR__ . “/font.ttf”, $line);
}
elseif ($textImageSelector==”addsecuenciallines”) {
$contents = file(“imagetextaux.txt”, FILE_IGNORE_NEW_LINES);
$line = array_shift($contents);
file_put_contents(“imagetextaux.txt”, implode(“rn”, $contents));
imagettftext($new_image, $imageFontSize, $angle, $coordinateX, $coordinateY, $hexColorAllocate, __DIR__ . “/font.ttf”, $line);
}
if ($textWatermarkSelector==”addwatermark”) {
$stamp = imagecreatefrompng(‘watermark.png’);
$marge_right = $coordinateXwatermark;
$marge_bottom = $coordinateYwatermark;
$sx = imagesx($stamp);
$sy = imagesy($stamp);
imagecopy($new_image, $stamp, imagesx($new_image) – $sx – $marge_right, imagesy($new_image) – $sy – $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));
}
switch($extension)
{
case ‘.jpg’:
case ‘.jpeg’:
if (imagetypes() & IMG_JPG) {
imagejpeg($new_image, $dist, $quality);
}
break;
case ‘.gif’:
if (imagetypes() & IMG_GIF) {
imagegif($new_image, $dist);
}
break;
case ‘.png’:
$scaleQuality = round(($quality/100) * 9);
$invertScaleQuality = 9 – $scaleQuality;
if (imagetypes() & IMG_PNG) {
imagepng($new_image, $dist, $invertScaleQuality);
}
break;
}
if ($convertFormat==”converttoWEBP”) {
$newReplacedFileName=replace_extension($dist,”webp”);
imagewebp($new_image, “images/”.$newReplacedFileName, $quality);
}
if ($convertFormat==”converttoJPG”) {
$newReplacedFileName=replace_extension($dist,”jpg”);
imagejpeg($new_image, “images/”.$newReplacedFileName, $quality);
}
if ($convertFormat==”converttoPNG”) {
$scaleQuality = round(($quality/100) * 9);
$invertScaleQuality = 9 – $scaleQuality;
$newReplacedFileName=replace_extension($dist,”png”);
imagepng($new_image, “images/”.$newReplacedFileName, $invertScaleQuality);
}
if ($convertFormat==”converttoGIF”) {
$newReplacedFileName=replace_extension($dist,”gif”);
imagegif($new_image, “images/”.$newReplacedFileName);
}
imagedestroy($new_image);
} else return false;
}
if ($module==”imagedownload”) {
if (file_exists(“phpseofiles.zip”)) unlink(“phpseofiles.zip”);
$files=explode(“|”,$_POST[‘data’]);
$tmpFile = tempnam(‘/tmp’, ”);
$zip = new ZipArchive;
$zip->open($tmpFile, ZipArchive::CREATE);
foreach ($files as $file) {
$file=str_replace(“””,””,$file);
if ((strlen($file))>=5){
$fileContent = file_get_contents($file);
$zip->addFromString(basename($file), $fileContent);
}
}
$zip->close();
header(‘Content-Type: application/zip’);
header(‘Content-disposition: attachment; filename=file.zip’);
header(‘Content-Length: ‘ . filesize($tmpFile));
readfile($tmpFile);
rename($tmpFile,”phpseofiles.zip”);
exit;
}
if ($module==”checkindexedsubmit”) {
$webproxy=$_POST[‘webproxy’];
$allurls=explode(“|”,$_POST[‘data’]);
$pausePerStepPHP=$_POST[‘pausePerStepPHP’];
$allurls=array_filter($allurls);//cleans empty lines
foreach ($allurls as $url){
$url=str_replace(‘”‘,”,$url);
$urlencoded=urlencode($url);
if (!empty($url)){
$urltoCheck=”https://google.com/search?q=$urlencoded”;
if ($webproxy==”noproxy”) {
$results = getPageGoogle(”,$urltoCheck, ”, $customUserAgent, 1, 25);
} else {
$urlDefinitiva=$webproxy.”&getPage=”.$urltoCheck;
$results = getPageGoogle(”,$urlDefinitiva, ”, $customUserAgent, 1, 25);
}
$arraydatos=$results[‘EXE’];
//Check if banned
if (preg_match(“/unusual traffic/i”, $arraydatos)) {
$bannedProxy=true;
} else {
if (preg_match(“/href/i”, $arraydatos)) {
$bannedProxy=false;
} else $bannedProxy=true;
}
if ($bannedProxy==true){
echo “Your current IP address -“.$_SERVER[‘SERVER_ADDR’].”- has been banned by Google. Stop during some hours or use a web proxy.n”;
} else {
$url=strtolower($url);
$url=trim( $url, “/” );
$arraydatos=strtolower($arraydatos);
if (strpos($arraydatos,”href=”$url”) !== false) { //se ha encontrado la URL
echo “YES $urln”;
} else {
echo “NO $urln”;
}
}
}
}
sleep ($pausePerStepPHP);
exit;
}
if ($module==”gmbchecksubmit”) {
$webproxy=$_POST[‘webproxy’];
$allurls=explode(“|”,$_POST[‘data’]);
$allurls=array_filter($allurls);//cleans empty lines
foreach ($allurls as $url){
$url=str_replace(‘”‘,”,$url);
$urlencoded=urlencode($url);
if (!empty($url)){
$urltoCheck=”https://google.com/search?q=$urlencoded”;
if ($webproxy==”noproxy”) {
$results = getPageGoogle(”,$urltoCheck, ”, $customUserAgent, 1, 25);
} else {
$urlDefinitiva=$webproxy.”&getPage=”.$urltoCheck;
$results = getPageGoogle(”,$urlDefinitiva, ”, $customUserAgent, 1, 25);
}
$arraydatos=$results[‘EXE’];
//Check if banned
if (preg_match(“/unusual traffic/i”, $arraydatos)) {
$bannedProxy=true;
} else {
if (preg_match(“/href/i”, $arraydatos)) {
$bannedProxy=false;
} else $bannedProxy=true;
}
if ($bannedProxy==true){
echo “Your current IP address -“.$_SERVER[‘SERVER_ADDR’].”- has been banned by Google. Stop during some hours or use a web proxy.n”;
} else {
$url=strtolower($url);
$url=trim( $url, “/” );
$arraydatos=strtolower($arraydatos);
if (strpos($arraydatos,”href=”$url”) !== false) { //se ha encontrado la URL
echo “YES $urln”;
} else {
echo “NO $urln”;
}
}
}
}
sleep ($batchDelaySeconds);
exit;
}
class WHOISClient
{
private $servers = array(
‘app’ => ‘whois.nic.google’,
‘live’ => ‘whois.nic.live’,
‘vip’ => ‘whois.nic.vip’,
‘shop’ => ‘whois.nic.shop’,
‘life’ => ‘whois.nic.life’,
‘club’ => ‘whois.nic.club’,
‘online’ => ‘whois.nic.online’,
‘site’ => ‘whois.nic.site’,
‘store’ => ‘whois.nic.store’,
‘xyz’ => ‘whois.nic.xyz’,
‘ac’ => ‘whois.nic.ac’,
‘ae’ => ‘whois.aeda.net.ae’,
‘aero’ => ‘whois.aero’,
‘af’ => ‘whois.nic.af’,
‘ag’ => ‘whois.nic.ag’,
‘al’ => ‘whois.ripe.net’,
‘am’ => ‘whois.amnic.net’,
‘as’ => ‘whois.nic.as’,
‘asia’ => ‘whois.nic.asia’,
‘at’ => ‘whois.nic.at’,
‘au’ => ‘whois.aunic.net’,
‘ax’ => ‘whois.ax’,
‘az’ => ‘whois.ripe.net’,
‘ba’ => ‘whois.ripe.net’,
‘be’ => ‘whois.dns.be’,
‘bg’ => ‘whois.register.bg’,
‘bi’ => ‘whois.nic.bi’,
‘biz’ => ‘whois.neulevel.biz’,
‘bj’ => ‘www.nic.bj’,
‘br’ => ‘whois.nic.br’,
‘br.com’ => ‘whois.centralnic.com’,
‘bt’ => ‘whois.netnames.net’,
‘by’ => ‘whois.ripe.net’,
‘bz’ => ‘whois.belizenic.bz’,
‘ca’ => ‘whois.cira.ca’,
‘cat’ => ‘whois.nic.cat’,
‘cc’ => ‘whois.nic.cc’,
‘cd’ => ‘whois.nic.cd’,
‘ch’ => ‘whois.nic.ch’,
‘ck’ => ‘whois.nic.ck’,
‘cl’ => ‘nic.cl’,
‘cn’ => ‘whois.cnnic.net.cn’,
‘cn.com’ => ‘whois.centralnic.com’,
‘co’ => ‘whois.nic.co’,
‘co.nl’ => ‘whois.co.nl’,
‘com’ => ‘whois.crsnic.net’, //whois.verisign-grs.com //whois.godaddy.com //whois.tucows.com
‘coop’ => ‘whois.nic.coop’,
‘cx’ => ‘whois.nic.cx’,
‘cy’ => ‘whois.ripe.net’,
‘cz’ => ‘whois.nic.cz’,
‘de’ => ‘whois.denic.de’,
‘dk’ => ‘whois.dk-hostmaster.dk’,
‘dm’ => ‘whois.nic.cx’,
‘dz’ => ‘whois.nic.dz’,
‘edu’ => ‘whois.educause.net’,
‘ee’ => ‘whois.tld.ee’,
‘eg’ => ‘whois.ripe.net’,
‘es’ => ‘whois.nic.es’,
‘eu’ => ‘whois.eu’,
‘eu.com’ => ‘whois.centralnic.com’,
‘fi’ => ‘whois.ficora.fi’,
‘fo’ => ‘whois.nic.fo’,
‘fr’ => ‘whois.nic.fr’,
‘gb’ => ‘whois.ripe.net’,
‘gb.com’ => ‘whois.centralnic.com’,
‘gb.net’ => ‘whois.centralnic.com’,
‘qc.com’ => ‘whois.centralnic.com’,
‘ge’ => ‘whois.ripe.net’,
‘gl’ => ‘whois.nic.gl’,
‘gm’ => ‘whois.ripe.net’,
‘gov’ => ‘whois.nic.gov’,
‘gr’ => ‘whois.ripe.net’,
‘gs’ => ‘whois.nic.gs’,
‘hk’ => ‘whois.hknic.net.hk’,
‘hm’ => ‘whois.registry.hm’,
‘hn’ => ‘whois2.afilias-grs.net’,
‘hr’ => ‘whois.ripe.net’,
‘hu’ => ‘whois.nic.hu’,
‘hu.com’ => ‘whois.centralnic.com’,
‘ie’ => ‘whois.domainregistry.ie’,
‘il’ => ‘whois.isoc.org.il’,
‘info’ => ‘whois.afilias.info’,
‘int’ => ‘whois.isi.edu’,
‘io’ => ‘whois.nic.io’,
‘iq’ => ‘vrx.net’,
‘ir’ => ‘whois.nic.ir’,
‘is’ => ‘whois.isnic.is’,
‘it’ => ‘whois.nic.it’,
‘je’ => ‘whois.je’,
‘jobs’ => ‘jobswhois.verisign-grs.com’,
‘jp’ => ‘whois.jprs.jp’,
‘ke’ => ‘whois.kenic.or.ke’,
‘kg’ => ‘whois.domain.kg’,
‘kr’ => ‘whois.nic.or.kr’,
‘la’ => ‘whois2.afilias-grs.net’,
‘li’ => ‘whois.nic.li’,
‘lt’ => ‘whois.domreg.lt’,
‘lu’ => ‘whois.restena.lu’,
‘lv’ => ‘whois.nic.lv’,
‘ly’ => ‘whois.lydomains.com’,
‘ma’ => ‘whois.iam.net.ma’,
‘mc’ => ‘whois.ripe.net’,
‘md’ => ‘whois.nic.md’,
‘me’ => ‘whois.nic.me’,
‘mil’ => ‘whois.nic.mil’,
‘mk’ => ‘whois.ripe.net’,
‘mobi’ => ‘whois.dotmobiregistry.net’,
‘ms’ => ‘whois.nic.ms’,
‘mt’ => ‘whois.ripe.net’,
‘mu’ => ‘whois.nic.mu’,
‘mx’ => ‘whois.nic.mx’,
‘my’ => ‘whois.mynic.net.my’,
‘name’ => ‘whois.nic.name’,
net‘ => ‘whois.crsnic.net’, //whois.verisign-grs.com //whois.godaddy.com //whois.tucows.com
‘nf’ => ‘whois.nic.cx’,
‘ng’ => ‘whois.nic.net.ng’,
‘nl’ => ‘whois.domain-registry.nl’,
‘no’ => ‘whois.norid.no’,
‘no.com’ => ‘whois.centralnic.com’,
‘nu’ => ‘whois.nic.nu’,
‘nz’ => ‘whois.srs.net.nz’,
‘org’ => ‘whois.tucows.com’, //whois.pir.org
‘pl’ => ‘whois.dns.pl’,
‘pr’ => ‘whois.nic.pr’,
‘pro’ => ‘whois.registrypro.pro’,
‘pt’ => ‘whois.dns.pt’,
‘pw’ => ‘whois.nic.pw’,
‘ro’ => ‘whois.rotld.ro’,
‘ru’ => ‘whois.tcinet.ru’,
‘sa’ => ‘saudinic.net.sa’,
‘sa.com’ => ‘whois.centralnic.com’,
‘sb’ => ‘whois.nic.net.sb’,
‘sc’ => ‘whois2.afilias-grs.net’,
‘se’ => ‘whois.nic-se.se’,
‘se.com’ => ‘whois.centralnic.com’,
‘se.net’ => ‘whois.centralnic.com’,
‘sg’ => ‘whois.nic.net.sg’,
‘sh’ => ‘whois.nic.sh’,
‘si’ => ‘whois.arnes.si’,
‘sk’ => ‘whois.sk-nic.sk’,
‘sm’ => ‘whois.nic.sm’,
‘st’ => ‘whois.nic.st’,
‘so’ => ‘whois.nic.so’,
‘su’ => ‘whois.tcinet.ru’,
‘tc’ => ‘whois.adamsnames.tc’,
‘tel’ => ‘whois.nic.tel’,
‘tf’ => ‘whois.nic.tf’,
‘th’ => ‘whois.thnic.net’,
‘tj’ => ‘whois.nic.tj’,
‘tk’ => ‘whois.nic.tk’,
‘tl’ => ‘whois.domains.tl’,
‘tm’ => ‘whois.nic.tm’,
‘tn’ => ‘whois.ripe.net’,
‘to’ => ‘whois.tonic.to’,
‘tp’ => ‘whois.domains.tl’,
‘tr’ => ‘whois.nic.tr’,
‘travel’ => ‘whois.nic.travel’,
‘tw’ => ‘whois.twnic.net.tw’,
‘tv’ => ‘whois.nic.tv’,
‘tz’ => ‘whois.tznic.or.tz’,
‘ua’ => ‘whois.ua’,
‘uk’ => ‘whois.nic.uk’,
‘uk.com’ => ‘whois.centralnic.com’,
‘uk.net’ => ‘whois.centralnic.com’,
‘gov.uk’ => ‘whois.ja.net’,
‘us’ => ‘whois.nic.us’,
‘us.com’ => ‘whois.centralnic.com’,
‘uy’ => ‘nic.uy’,
‘uy.com’ => ‘whois.centralnic.com’,
‘uz’ => ‘whois.cctld.uz’,
‘va’ => ‘whois.ripe.net’,
‘vc’ => ‘whois2.afilias-grs.net’,
‘ve’ => ‘whois.nic.ve’,
‘vg’ => ‘whois.adamsnames.tc’,
‘ws’ => ‘whois.website.ws’,
‘xxx’ => ‘whois.nic.xxx’,
‘yu’ => ‘whois.ripe.net’,
‘za.com’ => ‘whois.centralnic.com’
);
private function locateServer($domain)
{
$parts = explode(‘.’, $domain);
for ($i = 0, $l = count($parts); $i < $l; $i++) { $root = implode('.', $parts); if (isset($this->servers[$root])) {
return $this->servers[$root];
}
array_shift($parts);
}
//throw new UnexpectedValueException(‘Unknown TLD in domain ‘ . $domain);
//error_log(“Unknown TLD in domain $domain n”, 3, “whois_errors.log”);
}
private function makeRequest($server, $domain)
{
$sock = @stream_socket_client(“tcp://$server:43”, $errNo, $errStr, 3);
if (!$sock) {
//throw new RuntimeException(‘Unable to connect to WHOIS server at ‘ . $server . ‘:43’);
//error_log(“Unable to connect to WHOIS server at $server n”, 3, “whois_errors.log”);
}
if ($server == $this->servers[‘com’]) {
// .com domains are a special case, there may be others as well
$domain = “$domain”;
}
if (is_resource($sock)){
if (!@fwrite($sock, “$domainrn”)) {
//throw new RuntimeException(‘Error sending request to server at ‘ . $server . ‘:43’);
//error_log(“Error sending request to server at $server n”, 3, “whois_errors.log”);
}
} else return false;
return @stream_get_contents($sock);
}
private function findRegistrar($raw)
{
if (preg_match(‘/registrars*[:-=][^a-z0-9]*([^rn]+)/i’, $raw, $matches)) {
return trim($matches[1]);
}
return false;
}
public function queryRegistrar($domain)
{
$server = $this->locateServer($domain);
$raw = $this->makeRequest($server, $domain);
return $this->findRegistrar($raw);
}
}
if ($module==”getPageGoogle”) {
$urltoget=urldecode($_GET[‘urltoget’]);
$results = getPageGoogle(”,$urltoget, ”, $customUserAgent, 1, 5);
//file_put_contents(‘arraydatosexe.log’, “n”. print_r($results[‘EXE’], true),FILE_APPEND | LOCK_EX);
echo $arraydatos=$results[‘EXE’];
exit;
}
if ($module==”checkadomauthority”) {
$webproxy=$_POST[‘webproxy’];
$pausePerStepPHP=$_POST[‘pausePerStepPHP’];
$allurls=explode(“|”,$_POST[‘data’]);
$allurls=array_filter($allurls);//cleans empty lines
$savecode = ““;
file_put_contents(‘temp-stop.php’, $savecode);
if (file_exists(“savedlinks/stop”)) exit;
foreach ($allurls as $url){
$url=str_replace(‘”‘,”,$url);
$urlencoded=urlencode($url);
if (file_exists(“savedlinks/stop”)) exit;
if (!empty($url)){
$domainFromURL=get_domain($url);
$urltoCheck=”http://web.archive.org/cdx/search/cdx?url=$domainFromURL”;
$protocol_host = ‘http’ . isSecure() . ‘://’ . filter_input(INPUT_SERVER, ‘HTTP_HOST’, FILTER_SANITIZE_URL);
$context = stream_context_create(array(
‘http’ => array(
‘timeout’ => 5,// 400 ms //0.4
)
));
$urltoCheck=urlencode($urltoCheck);
$host = “”;
$host = @file_get_contents($protocol_host . $_SERVER[‘PHP_SELF’]. ‘?module=getPageGoogle&urltoget=’ . $urltoCheck, false, $context);
$numResultadosWayback=substr_count($host, “n”);
$url=strtolower($url);
$url=trim( $url, “/” );
if(preg_match(‘/(.cat|.eus|.br|.ir)b/’, $domainFromURL) === 1){
$baseDomainCheck=”https://search.nominalia.com/search?domain=”;
$iconDomainRegistrar=”https://www.google.com/s2/favicons?domain=nominalia.com”;
} elseif (preg_match(‘/(.hk|.fi)b/’, $domainFromURL) === 1){
$baseDomainCheck=”https://www.onlydomains.com/domain/frontSearch?domain=”;
$iconDomainRegistrar=”https://www.google.com/s2/favicons?domain=onlydomains.com”;
} else {
$baseDomainCheck=”https://godaddy.com/domainsearch/find?checkAvail=1&domainToCheck=”;
$iconDomainRegistrar=”https://img6.wsimg.com/ux/favicon/favicon-32×32.png”;
}
//echo $domainFromURL.”$iconDomainRegistrarfavicons?domain=web.archivefavicons?domain=googlefavicons?domain=googlefaviconfavicons?domain=openlinkprofilerfavicons?domain=monitorbacklinksfavicons?domain=seokicksfavicons?domain=rankwatch YES “.$numResultadosWayback.” ?threshold=&target=$domainFromURL“.”n”;
//$url$iconDomainRegistrarfavicons?domain=googlefavicons?domain=googlefaviconfavicons?domain=openlinkprofilerfavicons?domain=monitorbacklinksfavicons?domain=seokicksfavicons?domain=rankwatch
echo “$url$iconDomainRegistrarfavicons?domain=googlefavicons?domain=googlefaviconfavicons?domain=openlinkprofilerfavicons?domain=monitorbacklinksfavicons?domain=seokicksfavicons?domain=rankwatch $numResultadosWayback ?threshold=&target=$domainFromURL CHECK CHECKn”;
//echo “$url $numResultadosWayback ?threshold=&target=$domainFromURL CHECK CHECKn”;
}
}
sleep ($pausePerStepPHP);
exit;
}
function URLIsValid(&$url) {
$file_headers = get_headers($url);
if ($file_headers === false) return false; // when server not found
foreach($file_headers as $header) { // parse all headers:
// corrects $url when 301/302 redirect(s) lead(s) to 200:
if(preg_match(“/^Location: (http.+)$/”,$header,$m)) $url=$m[1];
// grabs the last $header $code, in case of redirect(s):
if(preg_match(“/^HTTP.+s(ddd)s/”,$header,$m)) $code=$m[1];
} // End foreach…
if($code==200) return true; // $code 200 == all OK
else return false; // All else has failed, so this must be a bad link
} // End function url_exists
/**
Get the whois content of an ip by selecting the correct server
*/
function get_whois($ip)
{
$w = get_whois_from_server(‘whois.iana.org’ , $ip);
//print “Response: ” . PHP_EOL;
//print $w;
//print PHP_EOL;
preg_match(“#whois:s*([w.]*)#si” , $w , $data);
$whois_server = $data[1];
//print “Whois Server: $whois_server ” . PHP_EOL;
// now get actual whois data
$whois_data = get_whois_from_server($whois_server , $ip);
return $whois_data;
}
/**
Get the whois result from a whois server
return text
*/
function get_whois_from_server($server , $ip)
{
$data = ”;
// Before connecting lets check whether server alive or not
$server = trim($server);
if(!strlen($server))
{
print “Blank string provided for server” . PHP_EOL;
die();
}
// Create the socket and connect
//print “Connecting to server $server …”;
$f = @fsockopen($server, 43, $errno, $errstr, 3); //Open a new connection
if(!$f)
{
print “Failed”;
return false;
}
//print “Done” . PHP_EOL;
// Set the timeout limit for read
if(!stream_set_timeout($f , 6))
{
die(‘Unable to set set_timeout’); #Did this solve the problem ?
}
// Send the IP to the whois server
if($f)
{
//print “Sending request for ip: $ip” . PHP_EOL;
$message = $ip . “rn”;
fputs($f, $message);
}
/*
Theory : stream_set_timeout must be set after a write and before a read for it to take effect on the read operation
If it is set before the write then it will have no effect : http://in.php.net/stream_set_timeout
*/
// Set the timeout limit for read
if( !stream_set_timeout($f , 3) )
{
die(‘Unable to stream_set_timeout’); #Did this solve the problem ?
}
// Set socket in non-blocking mode
stream_set_blocking ($f, 0 );
// If connection still valid
if($f)
{
//print “Starting to read socket”.PHP_EOL;
while (!feof($f))
{
//print “Read attempt…”.PHP_EOL;
$data .= fread($f , 128);
}
}
// Now return the data
return $data;
}
function get_domain($domain, $debug = false)
{
$original = $domain = strtolower($domain);
if (filter_var($domain, FILTER_VALIDATE_IP)) { return $domain; }
$debug ? print(‘» Parsing: ‘.$original) : false;
$arr = array_slice(array_filter(explode(‘.’, $domain, 4), function($value){
return $value !== ‘www’;
}), 0); //rebuild array indexes
if (count($arr) > 2)
{
$count = count($arr);
$_sub = explode(‘.’, $count === 4 ? $arr[3] : $arr[2]);
$debug ? print(” (parts count: {$count})”) : false;
if (count($_sub) === 2) // two level TLD
{
$removed = array_shift($arr);
if ($count === 4) // got a subdomain acting as a domain
{
$removed = array_shift($arr);
}
$debug ? print(“
n” . ‘[*] Two level TLD: ‘ . join(‘.’, $_sub) . ‘ ‘) : false;
}
elseif (count($_sub) === 1) // one level TLD
{
$removed = array_shift($arr); //remove the subdomain
if (strlen($_sub[0]) === 2 && $count === 3) // TLD domain must be 2 letters
{
array_unshift($arr, $removed);
}
else
{
// non country TLD according to IANA
$tlds = array(
‘aero’,
‘arpa’,
‘asia’,
‘biz’,
‘cat’,
‘com’,
‘coop’,
‘edu’,
‘gov’,
‘info’,
‘jobs’,
‘mil’,
‘mobi’,
‘museum’,
‘name’,
‘net’,
‘org’,
‘post’,
‘pro’,
‘tel’,
‘travel’,
‘xxx’,
);
if (count($arr) > 2 && in_array($_sub[0], $tlds) !== false) //special TLD don’t have a country
{
array_shift($arr);
}
}
$debug ? print(“
n” .'[*] One level TLD: ‘.join(‘.’, $_sub).’ ‘) : false;
}
else // more than 3 levels, something is wrong
{
for ($i = count($_sub); $i > 1; $i–)
{
$removed = array_shift($arr);
}
$debug ? print(“
n” . ‘[*] Three level TLD: ‘ . join(‘.’, $_sub) . ‘ ‘) : false;
}
}
elseif (count($arr) === 2)
{
$arr0 = array_shift($arr);
if (strpos(join(‘.’, $arr), ‘.’) === false
&& in_array($arr[0], array(‘localhost’,’test’,’invalid’)) === false) // not a reserved domain
{
$debug ? print(“
n” .’Seems invalid domain: ‘.join(‘.’, $arr).’ re-adding: ‘.$arr0.’ ‘) : false;
// seems invalid domain, restore it
array_unshift($arr, $arr0);
}
}
$debug ? print(“
n”.’« Done parsing: ‘ . $original . ‘ as ‘. join(‘.’, $arr) .”
n”) : false;
return join(‘.’, $arr);
}
function isSecure() { // prepare host url
return ((isset($_SERVER[‘HTTPS’]) && !empty($_SERVER[‘HTTPS’]) && $_SERVER[‘HTTPS’] !== ‘off’) || $_SERVER[‘SERVER_PORT’] == 443) ? ‘s’ : ”;
}
if ($module==”getnotifications”) {
$totalNotificaciones = file_get_contents(‘https://netgrows.com/notifications/total.php’, true);
$data = array(
‘unseen_notification’ => $totalNotificaciones
);
echo json_encode($data);
exit;
}
class SimpleXLSXGen {
public $curSheet;
protected $sheets;
protected $template;
protected $SI, $SI_KEYS;
public function __construct() {
$this->curSheet = -1;
$this->sheets = [ [‘name’ => ‘Sheet1’, ‘rows’ => [] ] ];
$this->SI = []; // sharedStrings index
$this->SI_KEYS = []; // & keys
$this->template = [
‘[Content_Types].xml’ => ‘





{SHEETS}



‘,
‘_rels/.rels’ => ‘




‘,
‘docProps/app.xml’ => ‘

0
‘.__CLASS__.’
‘,
‘docProps/core.xml’ => ‘

{DATE}
en-US
{DATE}
1
‘,
‘xl/_rels/workbook.xml.rels’ => ‘


{SHEETS}’,
‘xl/worksheets/sheet1.xml’ => ‘
{COLS}{ROWS}‘,
‘xl/sharedStrings.xml’ => ‘
{STRINGS}‘,
‘xl/styles.xml’ => ‘
‘, ‘xl/workbook.xml’ => ‘ {SHEETS} ‘ ]; } public static function fromArray( array $rows, $sheetName = null ) { $xlsx = new static(); return $xlsx->addSheet( $rows, $sheetName ); } public function addSheet( array $rows, $name = null ) { $this->curSheet++; $this->sheets[$this->curSheet] = [‘name’ => $name ?: ‘Sheet’.($this->curSheet+1)]; if ( is_array( $rows ) && isset( $rows[0] ) && is_array($rows[0]) ) { $this->sheets[$this->curSheet][‘rows’] = $rows; } else { $this->sheets[$this->curSheet][‘rows’] = []; } return $this; } public function __toString() { $fh = fopen( ‘php://memory’, ‘wb’ ); if ( ! $fh ) { return ”; } if ( ! $this->_write( $fh ) ) { fclose( $fh ); return ”; } $size = ftell( $fh ); fseek( $fh, 0); return (string) fread( $fh, $size ); } public function saveAs( $filename ) { $fh = fopen( $filename, ‘wb’ ); if (!$fh) { return false; } if ( !$this->_write($fh) ) { fclose($fh); return false; } fclose($fh); return true; } public function download() { return $this->downloadAs( gmdate(‘YmdHi’) . ‘.xlsx’ ); } public function downloadAs( $filename ) { $fh = fopen(‘php://memory’,’wb’); if (!$fh) { return false; } if ( !$this->_write( $fh )) { fclose( $fh ); return false; } $size = ftell($fh); header(‘Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet’); header(‘Content-Disposition: attachment; filename=”‘.$filename.'”‘); header(‘Last-Modified: ‘ . gmdate(‘D, d M Y H:i:s GMT’ , time() )); header(‘Content-Length: ‘.$size); while( ob_get_level() ) { ob_end_clean(); } fseek($fh,0); fpassthru( $fh ); fclose($fh); return true; } protected function _write( $fh ) { $dirSignatureE= “x50x4bx05x06″; // end of central dir signature $zipComments = ‘Generated by ‘.__CLASS__.’ PHP class, thanks sergey.shuchkin@gmail.com’; if (!$fh) { return false; } $cdrec = ”; // central directory content $entries= 0; // number of zipped files $cnt_sheets = count( $this->sheets ); foreach ($this->template as $cfilename => $template ) { if ( $cfilename === ‘[Content_Types].xml’ ) { $s = ”; for ( $i = 0; $i < $cnt_sheets; $i++) { $s .= '‘; } $template = str_replace(‘{SHEETS}’, $s, $template); $this->_writeEntry($fh, $cdrec, $cfilename, $template); $entries++; } elseif ( $cfilename === ‘xl/_rels/workbook.xml.rels’ ) { $s = ”; for ( $i = 0; $i < $cnt_sheets; $i++) { $s .= 'n”; } $s .= ‘
‘; $template = str_replace(‘{SHEETS}’, $s, $template); $this->_writeEntry($fh, $cdrec, $cfilename, $template); $entries++; } elseif ( $cfilename === ‘xl/workbook.xml’ ) { $s = ”; foreach ( $this->sheets as $k => $v ) { $s .= ‘‘; } $template = str_replace(‘{SHEETS}’, $s, $template); $this->_writeEntry($fh, $cdrec, $cfilename, $template); $entries++; } elseif ( $cfilename === ‘docProps/core.xml’ ) { $template = str_replace(‘{DATE}’, gmdate(‘Y-m-dTH:i:sZ’), $template); $this->_writeEntry($fh, $cdrec, $cfilename, $template); $entries++; } elseif ( $cfilename === ‘xl/sharedStrings.xml’ ) { if (!count($this->SI)) { $this->SI[] = ‘No Data’; } $si_cnt = count($this->SI); $this->SI = ‘‘.implode(“rn“, $this->SI).’‘; $template = str_replace([‘{CNT}’, ‘{STRINGS}’], [ $si_cnt, $this->SI ], $template ); $this->_writeEntry($fh, $cdrec, $cfilename, $template); $entries++; } elseif ( $cfilename === ‘xl/worksheets/sheet1.xml’ ) { foreach ( $this->sheets as $k => $v ) { $filename = ‘xl/worksheets/sheet’.($k+1).’.xml’; $xml = $this->_sheetToXML($this->sheets[$k], $template); $this->_writeEntry($fh, $cdrec, $filename, $xml ); $entries++; } $xml = null; } else { $this->_writeEntry($fh, $cdrec, $cfilename, $template); $entries++; } } $before_cd = ftell($fh); fwrite($fh, $cdrec); // end of central dir fwrite($fh, $dirSignatureE); fwrite($fh, pack(‘v’, 0)); // number of this disk fwrite($fh, pack(‘v’, 0)); // number of the disk with the start of the central directory fwrite($fh, pack(‘v’, $entries)); // total # of entries “on this disk” fwrite($fh, pack(‘v’, $entries)); // total # of entries overall fwrite($fh, pack(‘V’, mb_strlen($cdrec,’8bit’))); // size of central dir fwrite($fh, pack(‘V’, $before_cd)); // offset to start of central dir fwrite($fh, pack(‘v’, mb_strlen($zipComments,’8bit’))); // .zip file comment length fwrite($fh, $zipComments); return true; } protected function _writeEntry($fh, &$cdrec, $cfilename, $data) { $zipSignature = “x50x4bx03x04”; // local file header signature $dirSignature = “x50x4bx01x02”; // central dir header signature $e = []; $e[‘uncsize’] = mb_strlen($data, ‘8bit’); // if data to compress is too small, just store it if($e[‘uncsize’] < 256){ $e['comsize'] = $e['uncsize']; $e['vneeded'] = 10; $e['cmethod'] = 0; $zdata = $data; } else{ // otherwise, compress it $zdata = gzcompress($data); $zdata = substr(substr($zdata, 0, - 4 ), 2); // fix crc bug (thanks to Eric Mueller) $e['comsize'] = mb_strlen($zdata, '8bit'); $e['vneeded'] = 10; $e['cmethod'] = 8; } $e['bitflag'] = 0; $e['crc_32'] = crc32($data); // Convert date and time to DOS Format, and set then $lastmod_timeS = str_pad(decbin(date('s')>=32?date(‘s’)-32:date(‘s’)), 5, ‘0’, STR_PAD_LEFT); $lastmod_timeM = str_pad(decbin(date(‘i’)), 6, ‘0’, STR_PAD_LEFT); $lastmod_timeH = str_pad(decbin(date(‘H’)), 5, ‘0’, STR_PAD_LEFT); $lastmod_dateD = str_pad(decbin(date(‘d’)), 5, ‘0’, STR_PAD_LEFT); $lastmod_dateM = str_pad(decbin(date(‘m’)), 4, ‘0’, STR_PAD_LEFT); $lastmod_dateY = str_pad(decbin(date(‘Y’)-1980), 7, ‘0’, STR_PAD_LEFT); # echo “ModTime: $lastmod_timeS-$lastmod_timeM-$lastmod_timeH (“.date(“s H H”).”)n”; # echo “ModDate: $lastmod_dateD-$lastmod_dateM-$lastmod_dateY (“.date(“d m Y”).”)n”; $e[‘modtime’] = bindec(“$lastmod_timeH$lastmod_timeM$lastmod_timeS”); $e[‘moddate’] = bindec(“$lastmod_dateY$lastmod_dateM$lastmod_dateD”); $e[‘offset’] = ftell($fh); fwrite($fh, $zipSignature); fwrite($fh, pack(‘s’, $e[‘vneeded’])); // version_needed fwrite($fh, pack(‘s’, $e[‘bitflag’])); // general_bit_flag fwrite($fh, pack(‘s’, $e[‘cmethod’])); // compression_method fwrite($fh, pack(‘s’, $e[‘modtime’])); // lastmod_time fwrite($fh, pack(‘s’, $e[‘moddate’])); // lastmod_date fwrite($fh, pack(‘V’, $e[‘crc_32’])); // crc-32 fwrite($fh, pack(‘I’, $e[‘comsize’])); // compressed_size fwrite($fh, pack(‘I’, $e[‘uncsize’])); // uncompressed_size fwrite($fh, pack(‘s’, mb_strlen($cfilename, ‘8bit’))); // file_name_length fwrite($fh, pack(‘s’, 0)); // extra_field_length fwrite($fh, $cfilename); // file_name // ignoring extra_field fwrite($fh, $zdata); // Append it to central dir $e[‘external_attributes’] = (substr($cfilename, -1) === ‘/’&&!$zdata)?16:32; // Directory or file name $e[‘comments’] = ”; $cdrec .= $dirSignature; $cdrec .= “x0x0”; // version made by $cdrec .= pack(‘v’, $e[‘vneeded’]); // version needed to extract $cdrec .= “x0x0”; // general bit flag $cdrec .= pack(‘v’, $e[‘cmethod’]); // compression method $cdrec .= pack(‘v’, $e[‘modtime’]); // lastmod time $cdrec .= pack(‘v’, $e[‘moddate’]); // lastmod date $cdrec .= pack(‘V’, $e[‘crc_32’]); // crc32 $cdrec .= pack(‘V’, $e[‘comsize’]); // compressed filesize $cdrec .= pack(‘V’, $e[‘uncsize’]); // uncompressed filesize $cdrec .= pack(‘v’, mb_strlen($cfilename,’8bit’)); // file name length $cdrec .= pack(‘v’, 0); // extra field length $cdrec .= pack(‘v’, mb_strlen($e[‘comments’],’8bit’)); // file comment length $cdrec .= pack(‘v’, 0); // disk number start $cdrec .= pack(‘v’, 0); // internal file attributes $cdrec .= pack(‘V’, $e[‘external_attributes’]); // internal file attributes $cdrec .= pack(‘V’, $e[‘offset’]); // relative offset of local header $cdrec .= $cfilename; $cdrec .= $e[‘comments’]; } protected function _sheetToXML(&$sheet, $template) { $COLS = []; $ROWS = []; if ( count($sheet[‘rows’]) ) { $CUR_ROW = 0; $COL = []; foreach( $sheet[‘rows’] as $r ) { $CUR_ROW++; $row = ‘‘; $CUR_COL = 0; foreach( $r as $v ) { $CUR_COL++; if ( !isset($COL[ $CUR_COL ])) { $COL[ $CUR_COL ] = 0; } if ( $v === null || $v === ” ) { continue; } $vl = mb_strlen( (string) $v ); $COL[ $CUR_COL ] = max( $vl, $COL[ $CUR_COL ] ); $cname = $this->num2name($CUR_COL) . $CUR_ROW; $ct = $cs = null; if ( is_string($v) ) { if ( $v === ‘0’ || preg_match( ‘/^[-+]?[1-9]d{0,14}$/’, $v ) ) { // Integer as General $cv = ltrim( $v, ‘+’ ); if ( $vl > 10 ) { $cs = 1; // [1] 0 } } elseif ( preg_match(‘/^[-+]?(0|[1-9]d*).d+$/’, $v ) ) { $cv = ltrim($v,’+’); } elseif ( preg_match(‘/^([-+]?d+)%$/’, $v, $m) ) { $cv = round( $m[1] / 100, 2); $cs = 2; // [9] 0% } elseif ( preg_match(‘/^([-+]d+.d+)%$/’, $v, $m) ) { $cv = round( $m[1] / 100, 4 ); $cs = 3; // [10] 0.00% } elseif ( preg_match(‘/^(dddd)-(dd)-(dd)$/’, $v, $m ) ){ $cv = $this->date2excel($m[1],$m[2],$m[3]); $cs = 4; // [14] mm-dd-yy } elseif ( preg_match(‘/^(dd)/(dd)/(dddd)$/’, $v, $m ) ){ $cv = $this->date2excel($m[3],$m[2],$m[1]); $cs = 4; // [14] mm-dd-yy } elseif ( preg_match(‘/^(dd):(dd):(dd)$/’, $v, $m ) ){ $cv = $this->date2excel(0,0,0,$m[1],$m[2],$m[3]); $cs = 5; // [14] mm-dd-yy } elseif ( preg_match(‘/^(dddd)-(dd)-(dd) (dd):(dd):(dd)$/’, $v, $m ) ) { $cv = $this->date2excel( $m[1], $m[2], $m[3], $m[4], $m[5], $m[6] ); $cs = 6; // [22] m/d/yy h:mm } elseif ( preg_match(‘/^(dd)/(dd)/(dddd) (dd):(dd):(dd)$/’, $v, $m ) ) { $cv = $this->date2excel( $m[3], $m[2], $m[1], $m[4], $m[5], $m[6] ); $cs = 6; // [22] m/d/yy h:mm } elseif ( mb_strlen( $v ) > 160 ) { $ct = ‘inlineStr’; $cv = str_replace([‘&’,’<','>‘,”x03″],[‘&’,'<‘,’>’,”], $v); } else { if ( preg_match(‘/^[0-9+-.]+$/’, $v ) ) { // Long ? $cs = 7; // Align Right } $v = ltrim($v,””); // disabled type detection $ct = ‘s’; // shared string $v = str_replace([‘&’,’<','>‘,”x03″],[‘&’,'<‘,’>’,”], $v); $cv = false; $skey = ‘~’.$v; if ( isset($this->SI_KEYS[ $skey ]) ) { $cv = $this->SI_KEYS[ $skey ]; } if ( $cv === false ) { $this->SI[] = $v; $cv = count( $this->SI ) – 1; $this->SI_KEYS[$skey] = $cv; } } } elseif ( is_int( $v ) || is_float( $v ) ) { $cv = $v; } else { continue; } $row .= ‘‘ .($ct === ‘inlineStr’ ? ‘‘.$cv.’‘ : ‘‘ . $cv . ‘‘).”rn”; } $ROWS[] = $row . “rn”; } foreach ( $COL as $k => $max ) { $COLS[] = ‘

‘; } $REF = ‘A1:’.$this->num2name(count($COLS)) . $CUR_ROW; } else { $COLS[] = ‘

‘; $ROWS[] = ‘0‘; $REF = ‘A1:A1’; } return str_replace([‘{REF}’,'{COLS}’,'{ROWS}’], [ $REF, implode(“rn”, $COLS), implode(“rn”,$ROWS) ], $template ); } public function num2name($num) { $numeric = ($num – 1) % 26; $letter = chr( 65 + $numeric ); $num2 = (int) ( ($num-1) / 26 ); if ( $num2 > 0 ) { return $this->num2name( $num2 ) . $letter; } return $letter; } public function date2excel($year, $month, $day, $hours=0, $minutes=0, $seconds=0) { $excelTime = (($hours * 3600) + ($minutes * 60) + $seconds) / 86400; if ( $year === 0 ) { return $excelTime; } // self::CALENDAR_WINDOWS_1900 $excel1900isLeapYear = True; if (((int)$year === 1900) && ($month <= 2)) { $excel1900isLeapYear = False; } $myExcelBaseDate = 2415020; // Julian base date Adjustment if ($month > 2) { $month -= 3; } else { $month += 9; –$year; } // Calculate the Julian Date, then subtract the Excel base date (JD 2415020 = 31-Dec-1899 Giving Excel Date of 0) $century = substr($year,0,2); $decade = substr($year,2,2); $excelDate = floor((146097 * $century) / 4) + floor((1461 * $decade) / 4) + floor((153 * $month + 2) / 5) + $day + 1721119 – $myExcelBaseDate + $excel1900isLeapYear; return (float) $excelDate + $excelTime; } } if ($module==”dataextractorsubmit”) { $allurls=explode(“|”,$_POST[‘data’]); $tipolink=$_POST[‘tipolink’]; $whattoget=$_POST[‘whattoget’]; $isgreedyornot=$_POST[‘isgreedyornot’]; $typeofexport=$_POST[‘typeofexport’]; $index=$_POST[‘index’]; $lengthacumulaURLs=$_POST[‘lengthacumulaURLs’]; $webproxy=$_POST[‘webproxy’]; $customTemplateParts=””; if ($tipolink==”default”) return “nolinktype”; $cuentaLoops=0; $titleFieldsArray=array(); //We get custom template outside the loop if (strpos($tipolink, ‘template-‘) !== false) { $customTemplateParts=getData_ExtractorTemplates($tipolink); $customTemplateParts=str_replace(“@@@”,”###”,$customTemplateParts); } $allurls=array_filter($allurls);//cleans empty lines if (($typeofexport==”csvfile”)||($typeofexport==”xlsfile”)) { $filenameCSV=$_SESSION[‘filenameCSVsession’]; $fp = fopen(dirname(__FILE__).”/data-extractor/”.$filenameCSV, ‘a’); $partesSueltasAux=explode(‘###’,$customTemplateParts); $notNeededTemplateName=array_shift($partesSueltasAux); $cuentauxiliar=0; for( $z = 0; $z<=((count($partesSueltasAux)/3)-1); $z++ ) { $titlefield= str_replace("n","",$partesSueltasAux[$cuentauxiliar]); $cuentauxiliar++; $beginBloque= str_replace("n","",$partesSueltasAux[$cuentauxiliar]); $cuentauxiliar++; $endBloque= str_replace("n","",$partesSueltasAux[$cuentauxiliar]); $cuentauxiliar++; if ($debugSearchDisplay){ echo "n-------titlefield-----n"; print_r($titlefield); echo "n------------n"; } $titleFieldsArray[]=$titlefield; } if ((!isset($_SESSION['cabecerasCSV']))||(($_SESSION['cabecerasCSV'])==false)) { $_SESSION['cabecerasCSV']=true; $cabecerasCSV=$titleFieldsArray; fputcsv($fp, $cabecerasCSV); } } $cuentaurls=0; foreach ($allurls as $url){ $contenidoCSV=array(); $url=str_replace('"','',$url); if ($webproxy=="noproxy") { $results = getPageGoogle('',$url, '', $customUserAgent, 1, 25); } else { $urlDefinitiva=$webproxy."&getPage=".$url; $results = getPageGoogle('',$urlDefinitiva, '', $customUserAgent, 1, 25); } $results = getPageGoogle('',$url, '', $customUserAgent, 1, 25); $arraydatos=$results['EXE'] ; $dom = new DOMDocument(); if (!empty($arraydatos)) @$dom->loadHTML($arraydatos); else echo “nERROR getting the URL $url n”; $xpath = new DOMXPath($dom); //Custom template if (strpos($tipolink, ‘template-‘) !== false) { $partesSueltas=explode(‘###’,$customTemplateParts); $notNeededTemplateName=array_shift($partesSueltas); $maincounter = 0; if ($debugSearchDisplay){ echo “n——-partesSueltas—–n”; print_r($partesSueltas); echo “n————n”; } $partPosition=1; $titlefield=$beginBloque=$endBloque=””; $totalPartes=count($partesSueltas); $totalLoops=$totalPartes/3; $cuentaindex=0; $contenidotxt=””; if ($debugSearchDisplay){ echo “n——totalLoops——n”; echo $totalLoops; echo “n————n”; } for( $i = 0; $i<=$totalLoops-1; $i++ ) { $titlefield= str_replace("n","",$partesSueltas[$cuentaindex]); //if (array_key_exists($cuentaindex,$partesSueltas)) $cuentaindex++; $beginBloque= str_replace("n","",$partesSueltas[$cuentaindex]); $cuentaindex++; $endBloque= str_replace("n","",$partesSueltas[$cuentaindex]); $cuentaindex++; if ($debugSearchDisplay){ echo "n-------beginBloque-----n"; echo $beginBloque; echo "n-------endBloque-----n"; echo $endBloque; echo "n------------n"; } if ($beginBloque!=""){ $str_arr = getInbetweenStrings($beginBloque, $endBloque, $arraydatos, $whattoget, $isgreedyornot); echo "n"; echo "Extracting content from: ".$url." | Regex: /$beginBloque([sS]*?)$endBloque/s"; echo "n"; if (array_key_exists(0,$str_arr)) $extraido=$str_arr[0]; else $extraido="NULL"; $extraido = preg_replace("/[rn]+/", "n", trim($extraido)); if ($typeofexport=="txtfile") { $contenidotxt.=$extraido."n";} elseif (($typeofexport=="csvfile")||($typeofexport=="xlsfile")) { $contenidoCSV[]=$extraido;} } } //We save individual txt files if ($typeofexport=="txtfile") { $filename=rand(99999, 999999999999).".txt"; file_put_contents(dirname(__FILE__)."/data-extractor/".$filename, $contenidotxt); } if (($typeofexport=="csvfile")||($typeofexport=="xlsfile")) { //We save each csv row /*$contenidoCSV = array_map("utf8_decode", $contenidoCSV);*/ $contenidoCSV = array_map( function($str) { return mb_convert_encoding($str, 'UTF-8'); //, 'HTML-ENTITIES' will remove Spanish special chars - still not perfect }, $contenidoCSV ); fputcsv($fp, $contenidoCSV); } } if($tipolink=="imgurlsHARD"){ $totalImages=0; preg_match_all('/([-a-z0-9_/:.]+.(jpg|jpeg|png))/i', $arraydatos, $matches); if (sizeof($matches[0]) > 0) { foreach ($matches[0] as $imageURL) { if (sanitizeURL($imageURL)) { echo sanitizeURL($imageURL).”n”; $totalImages++; } } } if ($totalImages==0) { echo “0 images found at $urln”; } } elseif($tipolink==”emailaddress”){ $totalEmails=0; //$arraydatos.=”📩littlekidspma@gmail.com”; // https://www.instagram.com/littlekidspma/ // https://www.instagram.com/p/7IYk0jO7e8/ preg_match_all(‘/[a-z0-9_-+.]+@[a-z0-9-]+.([a-z]{2,4})(?:.[a-z]{2})?/i’, $arraydatos, $matches); if (sizeof($matches[0]) > 0) { foreach ($matches[0] as $emailAdress) { //echo $emailAdress.”n”; if (validate_email($emailAdress)==”ok”) { $emailAdress=preg_replace(‘/u[0-9a-fA-F]{4}/’, ”, $emailAdress); //$emailAdress=preg_replace(‘/\x[0-9a-fA-F]{4}/’, ”, $emailAdress); echo $emailAdress.”n”; $totalEmails++; } } } if ($totalEmails==0) { echo “0 emails found at $urln”; } } elseif (strpos($tipolink, ‘template-‘) === false) { if($tipolink==”imgurlsSOFT”) $hrefs = $xpath->evaluate(“/html/body//img”); else $hrefs = $xpath->evaluate(“/html/body//a”); if (!empty($url)) { for ($i = 0; $i < $hrefs->length; $i++) { $href = $hrefs->item($i); if($tipolink==”imgurlsSOFT”) $urlExtraida = $href->getAttribute(‘src’); else $urlExtraida = $href->getAttribute(‘href’); $resultURL = parse_url($url); $baseDomainz=$resultURL[‘scheme’].”://”.$resultURL[‘host’]; if((strpos($urlExtraida, “http://”) !== false)||(strpos($urlExtraida, “https://”) !== false)){ if ((($tipolink==”alllinks”)||($tipolink==”external”)||($tipolink==”imgurlsSOFT”))&& (strpos($urlExtraida, $resultURL[‘host’]) === false)) if (sanitizeURL($urlExtraida)) echo trim($urlExtraida).”n”; //All URLS con http (internal y external) elseif (((($tipolink==”alllinks”)||($tipolink==”internal”)||($tipolink==”imgurlsSOFT”))&& (strpos($urlExtraida, $resultURL[‘host’]) !== false))) echo trim($urlExtraida).”n”; //Internal with https } else if (($tipolink==”alllinks”)||($tipolink==”internal”)||($tipolink==”imgurlsSOFT”)) echo trim($baseDomainz.$urlExtraida).”n”; //Internal relative URL, we add domain prefix } if ($hrefs->length==0) echo “No URLs found for $url. They may be blocking you.n”; } } $cuentaurls++; } if (($typeofexport==”csvfile”)||($typeofexport==”xlsfile”)) fclose($fp); if (($typeofexport==”xlsfile”)&&($index==$lengthacumulaURLs-1)) { sleep(5); $csvFilePath=dirname(__FILE__).”/data-extractor/”.$filenameCSV; $xlsFilePath=str_replace(“.csv”,”.xlsx”,$csvFilePath); $arrayofArrays=array(); $file = fopen($csvFilePath, ‘r’); while (($line = fgetcsv($file)) !== FALSE) { $line = array_map( function($str) { return clean($str); }, $line ); $arrayofArrays[]= $line; } $xlsx = SimpleXLSXGen::fromArray( $arrayofArrays ); $xlsx->saveAs($xlsFilePath); fclose($file); } //End dataextractorsubmit exit; } if ($module==”imgdltDirectory”){ //Delete all stored images $images = glob(“images/*.*”); foreach($images as $image){ @unlink($image); } exit; } if ($module==”filedltDirectory”){ //Delete all stored images $images = glob(“mfiles/*.*”); foreach($images as $image){ @unlink($image); } exit; } if ($module==”filedltArticles”){ //Delete all stored images $images = glob(“article-translator/output/*.*”); foreach($images as $image){ @unlink($image); } exit; } if ($module==”filedltArticlesSources”){ //Delete all stored images $images = glob(“article-translator/*.*”); foreach($images as $image){ @unlink($image); } exit; } if ($module==”imgupld”){ //Begin image submit $data = array(); if( isset( $_POST[‘image_upload’] ) && !empty( $_FILES[‘images’] )){ //flip if(isset($_POST[‘flipImageSelector’])) $flipImageSelector=$_POST[‘flipImageSelector’]; //resize if(isset($_POST[‘resizeImageSelector’])) $resizeImageSelector=$_POST[‘resizeImageSelector’]; if(isset($_POST[‘newImageWidth’])) $newImageWidth=$_POST[‘newImageWidth’]; if(isset($_POST[‘conversionQuality’])) $conversionQuality=$_POST[‘conversionQuality’]; //text1 if(isset($_POST[‘text1ImageSelector’])) $text1ImageSelector=$_POST[‘text1ImageSelector’]; else $text1ImageSelector=””; $addTextoImage=$_POST[‘addTextoImage’]; $coordinateX=$_POST[‘coordinateX’]; $coordinateY=$_POST[‘coordinateY’]; $coordinateXwatermark=$_POST[‘coordinateXwatermark’]; $coordinateYwatermark=$_POST[‘coordinateYwatermark’]; if(isset($_POST[‘imageFontSize’])) $imageFontSize=$_POST[‘imageFontSize’]; if(isset($_POST[‘imageFontColor’])) $imageFontColor=$_POST[‘imageFontColor’]; if(isset($_POST[‘textColor’])) $textColor=$_POST[‘textColor’]; //text2 if(isset($_POST[‘text2ImageSelector’])) $text2ImageSelector=$_POST[‘text2ImageSelector’]; else $text2ImageSelector=””; if ($text2ImageSelector==”addsecuenciallines”) { $file_contents = file(“imagetext.txt”); file_put_contents(“imagetextaux.txt”, $file_contents); } //watermark $textWatermarkSelector=$_POST[‘textWatermarkSelector’]; //conversion $convertFormat=$_POST[‘convertFormat’]; //get the structured array $images = restructure_array( $_FILES ); $allowedExts = array(“gif”, “jpeg”, “jpg”, “png”); if (!empty($_SERVER[‘HTTP_CLIENT_IP’])) { $ip = $_SERVER[‘HTTP_CLIENT_IP’]; } elseif (!empty($_SERVER[‘HTTP_X_FORWARDED_FOR’])) { $ip = $_SERVER[‘HTTP_X_FORWARDED_FOR’]; } else { $ip = $_SERVER[‘REMOTE_ADDR’]; } foreach ( $images as $key => $value){ $i = $key+1; //create directory if not exists if (!file_exists(‘images’)) { mkdir(‘images’, 0777, true); } $image_name = $value[‘name’]; //get image extension $ext = strtolower(pathinfo($image_name, PATHINFO_EXTENSION)); //assign unique name to image $nameOnly=strtolower(pathinfo($image_name, PATHINFO_FILENAME));; $name = $nameOnly.”-“.$i*time().’.’.$ext; //image size calcuation in KB $image_size = $value[“size”] / 1024; $image_flag = true; //max upload image size 512MB $max_size = 512000; if( in_array($ext, $allowedExts) && $image_size < $max_size ){ $image_flag = true; } else { $image_flag = false; $data[$i]['error'] = 'Maybe '.$image_name. ' exceeds max '.$max_size.' KB size or incorrect file extension'; } if( $value["error"] > 0 ){ $image_flag = false; $data[$i][‘error’] = ”; $data[$i][‘error’].= ‘
‘.$image_name.’ Image contains error – Error Code : ‘.$value[“error”]; } if($image_flag){ move_uploaded_file($value[“tmp_name”], “images/”.$name); $src = “images/”.$name; $dataImg = getimagesize($src); $width = $dataImg[0]; $randSufix=rand(1,99999); $dist = “images/”.$nameOnly.”-“.$randSufix.’.’.$ext; $data[$i][‘success’] = $thumbnail = ”.$nameOnly.”-“.$randSufix.’.’.$ext; if ($resizeImageSelector!=”reducesize”){ $newImageWidth=$width; } //text from input if ($text1ImageSelector==”addaphrase”){ $textImageSelector=”addaphrase”; } //text from file if ($text2ImageSelector==”addrandomlines”){ $textImageSelector=”addrandomlines”; } elseif ($text2ImageSelector==”addsecuenciallines”){ $textImageSelector=”addsecuenciallines”; } else $textImageSelector=””; transform_image($src, $dist, $newImageWidth, $conversionQuality, $flipImageSelector, $textImageSelector, $addTextoImage, $coordinateX, $coordinateY, $coordinateXwatermark, $coordinateYwatermark, $imageFontSize, $imageFontColor, $textWatermarkSelector, $convertFormat); if ($convertFormat==”converttoWEBP”) { $newReplacedFileName=replace_extension($dist,”webp”); $data[$i][‘success’] = $newReplacedFileName; } if ($convertFormat==”converttoJPG”) { $newReplacedFileName=replace_extension($dist,”jpg”); $data[$i][‘success’] = $newReplacedFileName; } if ($convertFormat==”converttoPNG”) { $newReplacedFileName=replace_extension($dist,”png”); $data[$i][‘success’] = $newReplacedFileName; } if ($convertFormat==”converttoGIF”) { $newReplacedFileName=replace_extension($dist,”gif”); $data[$i][‘success’] = $newReplacedFileName; } } //delete original unlink(“./images/”.$name); } echo json_encode($data); } else { $data[] = ‘No Image Selected..’; } exit; } //End image submit if ($module==”fileupld”){ //Begin file submit $data = array(); if( isset( $_POST[‘image_upload’] ) && !empty( $_FILES[‘images’] )){ //get the structured array $images = restructure_array( $_FILES ); $allowedExts = array(“txt”, “csv”); if (!empty($_SERVER[‘HTTP_CLIENT_IP’])) { $ip = $_SERVER[‘HTTP_CLIENT_IP’]; } elseif (!empty($_SERVER[‘HTTP_X_FORWARDED_FOR’])) { $ip = $_SERVER[‘HTTP_X_FORWARDED_FOR’]; } else { $ip = $_SERVER[‘REMOTE_ADDR’]; } if( isset( $_POST[‘fileOperation’] )) $fileOperation=$_POST[‘fileOperation’]; if( isset( $_POST[‘mergeSeparator’] )) $mergeSeparator=$_POST[‘mergeSeparator’]; $mergedTxt=””; $randSufix=rand(1,99999); foreach ( $images as $key => $value){ $i = $key+1; //create directory if not exists if (!file_exists(‘mfiles’)) { mkdir(‘mfiles’, 0777, true); } $image_name = $value[‘name’]; $ext = strtolower(pathinfo($image_name, PATHINFO_EXTENSION)); $nameOnly=strtolower(pathinfo($image_name, PATHINFO_FILENAME));; $name = $nameOnly.”-“.$i*time().’.’.$ext; $image_flag = true; if( in_array($ext, $allowedExts)){ $image_flag = true; } else { $image_flag = false; $data[$i][‘error’] = ‘Incorrect file extension’; } if($image_flag){ //move_uploaded_file($value[“tmp_name”], “mfiles/”.$name); // store file content as a string in $str //$mergedTxt .= file_get_contents(“mfiles/”.$name).”n”; $fileContent=””; $fileContent=file_get_contents($value[“tmp_name”]); //.”n” $mergedTxt .= $fileContent.”n”; if ($fileOperation==”csvToTxt”) { $fileContentFinal=str_replace(“$mergeSeparator”,”n”,$fileContent); //OFRECER OTROS SEPARADORES COMO , Y TAB… file_put_contents(“mfiles/$nameOnly.txt”,$fileContentFinal); $data[$i][‘success’] = “mfiles/$nameOnly.txt”; } if ($fileOperation==”txtToCsv”) { $fileContentFinal=str_replace(“n”,”$mergeSeparator”,$fileContent); //OFRECER OTROS SEPARADORES COMO , Y TAB… file_put_contents(“mfiles/$nameOnly.csv”,utf8_decode($fileContentFinal)); $data[$i][‘success’] = “mfiles/$nameOnly.csv”; } } } if ($fileOperation==”mergeTxt”) { file_put_contents(“mfiles/allmerged-$randSufix.txt”,$mergedTxt); $data[$i][‘success’] = “mfiles/allmerged-$randSufix.txt”; } if ($fileOperation==”mergeCsv”) { file_put_contents(“mfiles/allmerged-$randSufix.csv”,$mergedTxt); $data[$i][‘success’] = “mfiles/allmerged-$randSufix.csv”; } echo json_encode($data); } else { $data[] = ‘No file Selected..’; } exit; } //End file upload if ($module==”articleUpload”){ //Begin image submit $data = array(); if( isset( $_POST[‘image_upload’] ) && !empty( $_FILES[‘images’] )){ //get the structured array $images = restructure_array( $_FILES ); $allowedExts = array(“txt”); if (!empty($_SERVER[‘HTTP_CLIENT_IP’])) { $ip = $_SERVER[‘HTTP_CLIENT_IP’]; } elseif (!empty($_SERVER[‘HTTP_X_FORWARDED_FOR’])) { $ip = $_SERVER[‘HTTP_X_FORWARDED_FOR’]; } else { $ip = $_SERVER[‘REMOTE_ADDR’]; } foreach ( $images as $key => $value){ $i = $key+1; //create directory if not exists if (!file_exists(‘article-translator’)) { mkdir(‘article-translator’, 0777, true); } $image_name = $value[‘name’]; //get image extension $ext = strtolower(pathinfo($image_name, PATHINFO_EXTENSION)); //assign unique name to image $nameOnly=strtolower(pathinfo($image_name, PATHINFO_FILENAME));; $name = $nameOnly.”-“.$i*time().’.’.$ext; $image_flag = true; if( $value[“error”] > 0 ){ $image_flag = false; $data[$i][‘error’] = ”; $data[$i][‘error’].= ‘
‘.$image_name.’ Image contains error – Error Code : ‘.$value[“error”]; } if($image_flag){ move_uploaded_file($value[“tmp_name”], “article-translator/”.$name); $src = “article-translator/”.$name; $randSufix=rand(1,99999); $dist = “article-translator/”.$nameOnly.”-“.$randSufix.’.’.$ext; $data[$i][‘success’] = $thumbnail = ”.$nameOnly.”-“.$randSufix.’.’.$ext; } //delete original //unlink(“./images/”.$name); } echo json_encode($data); } else { $data[] = ‘No Image Selected..’; } exit; } //End article upload /*************************/ /*Filename for csv & xls*/ /***********************/ if ((!isset($_SESSION[‘filenameCSVsession’]))||($module==”dataextractor”)||($module==”indexedcheck”)) { $_SESSION[‘filenameCSVsession’]=rand(99999, 999999999999).”.csv”; $_SESSION[‘cabecerasCSV’]=false; } /****************************/ /*Begin string translations*/ /**************************/ if ($langSelected==”es”) { //Spanish $_welcometo=”¡Bienvenid@ a PHPSEO! Busca una palabra clave para empezar a usar la herramienta.”; $_keyword=”palabra clave”; $_optional=”opcional”; $_search=”BUSCAR”; $_titleURLscrapper=”URL scraper”; $_subtitleURLscrapper=”Busca URLs por palabra clave. Elige footprint (opcional), nº de resultados y región de Google”; $_titleKeywordTool=”Generador de keywords”; $_subtitleKeywordTool=”Obtén sugerencias de palabras clave de Google, YouTube y Amazon derivadas de una palabra clave principal”; $_seedKeywordAtEnd=”Palabra clave al final”; $_titleImageDownloaderBoth=”Descargar y editar imágenes (bulk)”; $_titleImageDownloader=”Descargar imágenes (bulk)”; $_titleImageEditor=”Editor de imágenes (bulk)”; $_subtitleImageDownloader=”Busca imágenes y descárgalas en un fichero .zip”; $_subtitleImageEditor=”Selecciona múltiples imágenes y modifícalas a la vez”; $_titleDataExtractor=”Extractor de datos”; $_subtitleDataExtractor=”Extrae URLs, enlaces, imágenes, emails y cualquier otro contenido de múltiples URLs”; $_titlePlagiCheck=”Detector de plagio”; $_subtitlePlagiCheck=”Pega tu texto y comprueba si está plagiado en Google”; $_morewordreqString=”100 o más palabras requeridas”; $_titleIndexedUrlCheck=”Comprobar URLs indexadas”; $_titleDomAuthChecker=”Autoridad de dominios en bulk”; $_titleMultiSeoTools=”Herramientas multi SEO”; $_subtitleIndexedUrlCheck=”Comprueba si URLs están indexadas en Google de forma masiva”; $_titleProxyManager=”Gestor de proxies”; $_subtitleProxyManager=”Gestiona y crea proxies web”; $_createaProxyServer=”CREAR UN NUEVO FICHERO PROXY”; $_typeaPassText=”Escribe un password y pulsa CREAR”; $_createText=”CREAR”; $_newPassText=”nuevo password”; $_downloadProxyFileText=”DESCARGAR FICHERO PROXY”; $_proxyListText=”LISTADO DE PROXIES”; $_proxyMiniHelp=”

Aquí defines los distintos proxies web que hayas creado en diferentes dominios (archivo web-proxy-list.txt).

  • Ten en cuenta que cada dominio debería tener una IP diferente, y que si tu IP es compartida, puede estar ya bloqueada o mostrando captcha.
  • Para crear un nuevo proxy, solo necesitas subir el archivo phpseo-proxy.php usando FTP a cualquier dominio, y obtener la URL completa del fichero subido.
    • Ejemplo: si subo phpseo-proxy.php a la subcarpeta -prueba- de midominiochulo.com, la URL del proxy será http://midominiochulo.com/prueba/phpseo-proxy.php?password=TUPASSWORD
    • Por seguridad, es recomendable cambiar el nombre del fichero phpseo-proxy.php antes de subirlo.
  • Después de subir el fichero, guarda el nuevo proxy web en la lista inferior (en una nueva línea), siguiendo el formato: NOMBREPROXY@@@URLPROXY?password=PASS.

“; $_templateListText=”PLANTILLAS PERSONALIZADAS”; $_templateListFormatText=”Formato de las plantillas”; $_templateListHelp=”Una plantilla por cada línea. Después de salvar una nueva plantilla, necesitarás refrescar la página para verla en el desplegable.”; $_titleDocumentation=”Documentación”; $_subtitleDocumentation=”PHPSEO ayuda y documentación”; $_titleInfo=”Info”; $_titleMainSettings=”Ajustes generales”; $_subtitleMainSettings=”Controla los ajustes generales”; $_extractedUrls=”URLS EXTRAIDAS”; $_extractedKeywords=”PALABRAS CLAVE EXTRAÍDAS”; $_extractedImages=”IMÁGENES EXTRAÍDAS”; $_urlList=”LISTA DE URLS”; $_seedurlList=”URLS SEMILLA”; $_results=”RESULTADOS”; $_text=”TEXTO”; $_removeDuplicate=”BORRA URLS DUPE”; $_removeDuplicateDomains=”BORRA DOMINIOS DUPE”; $_zeroResultsMsg=”0 results. Make a new search, if no results, Google may be blocking you.”; $_containing=”que contengan”; $_notContaining=”que no contengan”; $_records=”registros”; $_showingCache=”Mostrando caché de una búsqueda anterior”; $_badProxy=”El proxy falla”; $_shufleLines=”ORDEN RANDOM”; $_azOrderLines=”ORDEN AZ”; $_zaOrderLines=”ORDEN ZA”; $_ucAll=”MAYUSC PRIMERAS”; $_ucFirst=”MAYUSC PRIMERA”; $_upperCase=”MAYÚSCULAS”; $_lowerCase=”MINÚSCULAS”; $_extractSelection=”Extraer selección”; $_allLinks=”Todos los links”; $_internalLinks=”Links internos”; $_externalLinks=”Links externos”; $_imageURLShard=”URLs de imágenes (todas)”; $_imageURLSoft=”URLs de imágenes (tags)”; $_emailAddress=”Direcciones email”; $_urlPerBatch=”URLs/bloque”; $_batchDelay=”Pausa bloques”; $_stWantMore=”¿Quieres más? Conoce PHPSEO PRO“; $_searchDelay=”Pausa”; $_sec=”seg”; $_remove=”Borrar”; $mainSettingsIntroText=”Aquí defines las opciones principales de PHPSEO (archivo config.txt).”; $langInfo=”lang define el idioma de la herramienta. Idiomas disponibles actualmente: en/es. Recarga la página después de cambiar el idioma para ver los cambios.”; $howManyURLPerStepInfo=”howManyURLPerStep define cuántas URLs se consultarán a la vez en cada bloque.”; $batchDelaySecondsInfo=”batchDelaySeconds define los segundos de pausa al buscar entre cada bloque.”; $searchDelaySecondsInfo=”searchDelaySeconds define los segundos de pausa entre diferentes búsquedas.”; $customUserAgentInfo=”customUserAgent define el user agent del navegador que utilizan los robots de PHPSEO.”; $_chooseImg=”Elige una o varias imágenes”; $_applyoperImg=”Aplica una o varias operaciones”; $_flipString=”Reflejar”; $_noflipString=”no reflejar”; $_fliphorString=”reflejar horizontal”; $_flipvertString=”reflejar vertical”; $_flipbothString=”reflejar ambas”; $_resizeString=”Redimensionar”; $_widthString=”Ancho”; $_qualityString=”Calidad JPG”; $_noresizeString=”no redimensionar”; $_reducesizeString=”reducir tamaño a”; $_addtextString=”Añadir texto”; $_textString=”Texto”; $_texttoaddString=”texto a agregar”; $_marleftString=”Margen Izquierda”; $_martopString=”Margen Superior”; $_fosizeString=”Tamaño de Fuente”; $_focolorString=”Color de Fuente”; $_notextString=”sin texto”; $_addPhraseString=”añadir una frase”; $_customFontString=”Puedes usar una fuente personalizada sobreescribiendo el archivo font.ttf localizado en la carpeta principal”; $_addTextfromFileString=”Añadir textos desde un archivo”; $_randomOrderString=”orden aleatorio”; $_secuencialOrderString=”orden secuencial”; $_eachlineWillBeString=”Cada línea del archivo imagetext.txt se usará como una frase. Puedes elegir entre orden aleatorio o secuencial a la hora de agregar frases a las imágenes.”; $_addWatermarkString=”Añadir marca de agua (imagen)”; $_noWatermarkString=”sin marca de agua”; $_addaWatermarkString=”añadir marca de agua”; $_theFileWatermarkString=”El archivo watermark.png en la carpeta principal se usará en esta operación. Puedes usar una nueva marca de agua sobreescribiendo el archivo.”; $_marrightString=”Margen Derecha”; $_marbottomString=”Margen Inferior”; $_convertFormatString=”Convertir formato”; $_noConversionString=”sin conversion”; $_convertToString=”convertir a”; $_uploadEditString=”SUBIR Y EDITAR”; $_uploadWaitString=”Procesando archivos…”; $_last100procString=”Últimas 100 imágenes procesadas”; $_last100procFilesString=”Últimos 100 archivos procesados”; $_deleteImagesString=”BORRAR ARCHIVOS”; $_downloadAllString=”Descargar todo”; $_trimToDomain=”Convertir a dominio”; $_textToDomain=”a dominio”; $_procString=”Imágenes procesadas”; $_procStringFiles=”Archivos procesados”; $notificationsTitle=”ULTIMAS ACTUALIZACIONES”; $notificationsSubtitle=”Notificaciones de PHPSEO”; $autoUpdateTitle=”PHPSEO ACTUALIZÁNDOSE…”; $autoUpdateAlreadyString=”Ya tienes la última versión de PHPSEO”; $autoUpdateFailedDownloadString=”Ha fallado la descarga desde”; $autoUpdateOkString=”PHPSEO actualizado con éxito, haz click aquí.“; $proxyAlertString=’Se generará un nuevo archivo de servidor proxy para PHPSEO. nn1.Descarga el archivo generado phpseo-proxy.php (puedes renombrarlo para más seguridad). nn2.Sube el archivo a una carpeta dentro de un sitio web. Necesitarás la URL pública completa de ese archivo (incluyendo http/s). nn3. Añade la URL del archivo en la lista inferior en el formato adecuado. Puedes ver un ejemplo del formato más abajo. No te olvides de agregar el password a la URL como parámetro final.’; $_titleFootprints=’Footprints’; $_descFootprints=’Guarda nuevas footprints con el formato: Nombre Footprint@@@comando de google‘; $_manualCheckString=’CHECK MANUAL’; $_automaticCheckString=’CHECK AUTOMÁTICO’; $_selectPasteExcelString=’también puedes seleccionar todo y pegar en excel’; $_downloadCSVString=’DESCARGAR CSV’; $_setUpYourProxy=’Por favor, configura tu propio web proxy, no puedes usar los proxies de ejemplo.’; $_textUnique=’El texto parece único’; $_textNotUnique=’El texto NO parece único’; $_noGoogleResults=’Google no ha devuelto ningún resultado, probablemente han bloqueado tu dirección IP. Espera unas horas o prueba con un proxy.’; $_bannedProxyString=”El proxy:nn$webproxynnparece estar baneado en Google. nnPor favor, visita el pie de págna y pega la URL de debug -Search URL- en una pestaña nueva.nnSi estás baneado, necesitarás esperas unas horas o probar un servidor y/o dirección IP diferentes.”; $_errorGD=’Parece que no tienes instalada la librería GD en PHP. Debes instalarla o activarla desde la configuración de tu servidor PHP.’; $_msgFooter=’PHPSEO es un proyecto personal de Juanma Rodríguez AKA Netgrows | Sígueme en YouTube y Twitter para apoyar el proyecto 😊 | También eres bienvenid@ al grupo de soporte donde podemos aprender sobre SEO todos juntos.’; /*New titles*/ $_titleGmbScrap=’GMB Data Extractor’; $_subtitleGmbScrap=’Extrae datos de los mapas de Google My Business usando la sesión actual del navegador.’; $_explainGmbScrap=’Hoteles en Madrid’; $_titleBulkTranslator=’Bulk TXT Translator’; $_subtitleBulkTranslator=’Traduce múltiples archivos TXT usando la sesión actual del navegador.’; $_titleMasiveMail=’Masive Mail Sender’; $_subtitleMasiveMail=’Envía emails a múltiples destinatarios usando Gmail, Outlook o Yahoo.’; $_titleMasiveWhats=’Masive WhatsApp Web Sender’; $_subtitleMasiveWhats=’Envío mensajes a tus contactos o grupos de WhatsApp Web automáticamente.’; $_titleMasiveTele=’Masive Telegram Web Sender’; $_subtitleMasiveTele=’Envío mensajes a tus contactos o grupos de Telegram Web automáticamente.’; $_titleMasiveFb=’Facebook group poster’; $_subtitleMasiveFb=’Postea mensajes en grupos de Facebook automáticamente usando la sesión actual del navegador.’; $_titleCustomScraper=’Custom Data Scraper’; $_subtitleCustomScraper=’Scrapea casi cualquier cosa de cualquier sitio web usando tu sesión actual del navegador.’; $_supportPhpseo=”PHPSEO es una herramienta gratuita gracias al apoyo de la comunidad”; $_phpseoExtMissing=”La extensión chrome de PHPSEO NO está cargada. Necesitas instalarla antes de usar esta herramienta. Necesitarás también permitir las ventanas emergentes.”; $_titleGscInternalLinking=”GSC onpage internal linking”; $_subTitleGscInternalLinking=”Ecuentra oportunidades de links internos usando Google Search Console. Crea los links usando la tabla wp_posts desde un exportado SQL de WordPress.”; $_titleFormFiller=”Contact Form Sender”; $_subtitleFormFiller=”Rellena formularios HTML automáticamente y envíalos cuando no tienen captcha.”; $_sourceFilesTransStr=”ARCHIVOS ORIGEN PARA SER TRADUCIDOS”; $_logTransStr=”LOG DE TRADUCCIONES”; $_uploadString=”SUBIR ARCHIVOS”; $_refreshFilesString=”REFRESCAR”; $_deleteFilesString=”BORRAR ARCHIVOS”; $_last100translatedFilesString=”Últimos archivos traducidos”; $_chooseTxtOrCsv=”Agrega tus archivos TXT o CSV”; $_mergeOrConvert=”UNIR Y CONVERTIR ARCHIVOS DE TEXTO”; $_subtitlemergeOrConvert=”Convierte líneas de TXT a columnas CSV y viceversa. Fusiona ficheros CSV y TXT.”; $_dropFiles=”Suelta los archivos aquí”; $_titleMergeLinks=”FUSIONAR”; $_subtitleMergeLinks=”Inserta links en cualquier artículo usando palabras aleatorias como anchor text”; $_articletoInsertMerge=”Artículo en el que se insertarán los links”; $_stLinkDensity=”Densidad de links”; $_stLinkDensityExplain=”Una densidad más alta hará que los links aleatorios estén más separados entre sí, pero requerirá un artículo más largo”; $_titleExtractBlocks=”EXTRAER BLOQUES DE HTML”; $_subtitleExtractBlocks=”Extrae tablas o bloques HTML basados en un atributo CSS”; $extBlockInstructions=”

1. Pega TODO el código HTML de una página. Ejemplo: view-source:https://getaawp.com/demo/

2. Escribe un selector CSS del contenedor principal de cada bloque que quieres extraer. Ejemplo: .aawp

Usos: Esto te permitiría, por ejemplo, reemplazar el ID de amazon de los bloques y pegar el HTML directamente en tu web.

“; $extOnlyInner=”Extraer solo el contenido interno”; $extFromBlocks=”Bloques de HTML extraídos”; $getHtmlFromUrl=”Obtener HTML desde URL”; $_stOrPasteHtml=”o pega todo el código de la web aquí”; $_stBlocksWillAppear=”Los códigos HTML extraídos aparecerán aquí”; $_stOperation=”Operación”; $_urlyKeywords=”HERRAMIENTAS PARA URLS & TEXTO”; $_suburlyKeywords=”Ayuda para algunas operaciones SEO habituales”; $_deleteLinesThat=”BORRAR LINEAS QUE CONTIENEN”; $_subdeleteLinesThat=”Borrar líneas de la lista 1 que contienen alguna línea de la lista 2″; $_words=”palabras”; $_characters=”letras”; $_removeLines=”BORRAR LÍNEAS”; $_htmlCode=”Código HTML”; $_list1=”Lista 1 (lista origen)”; $_list2=”Lista 2 (palabras para comprobar)”; $_csvSep=”Separador CSV”; $_cssSelector=”Selector CSS”; $_stPauseBetween=”Pausa entre bloques (seg)”; $_stPauseBetweenURLs=”Pausa entre URLs (seg)”; $_getText=”OBTENER”; $_domAuthCheck=”DOMAIN AUTHORITY CHECKER”; $_subdomAuthCheck=”Comprueba la autoridad SEO de dominios de forma masiva”; $_extBlocks=”EXTRAER BLOQUES”; $_mergeOpt1=”Fusionar TXTs”; $_mergeOpt2=”Fusionar CSVs”; $_mergeOpt3=”CSV a TXT (columnas a líneas)”; $_mergeOpt4=”TXT a CSV (líneas a columnas)”; $_expDomainFinder=”EXPIRED DOMAIN FINDER”; $_subexpDomainFinder=”Escanea miles de dominios en busca de expirados a partir de unas URLs origen”; $_stFindUseful=”Puede encontrar útiles estos archivos acumulativos de búsquedas anteriores: “; $_stAvaDoms=”Dominios libres”; $_stAvaDomsInfo=”Dominios disponibles para registrar. Puedes obtener algún falso positivo, pero deberían ser casos raros.”; $_stDeadDoms=”Dominios muertos”; $_stDeadDomsInfo=”Los dominios muertos no tienen un sitio web asociado, pero es posible que no estén libres para ser registrados.”; $_stUrlsSemilla=”URLs origen”; $_stUrlsSemillaInfo=”Introduce algunas URL para comenzar a buscar dominios muertos. Un dominio muerto es un dominio sin una página web activa.”; $_stYourLicensedEmail=”Email asociado a la licencia”; $_stYourLicensedName=”Nombre asociado a la licencia”; $_stUrlsStep=”URLs por bloque:”; $_stReloadPage=”Recarga la página para comenzar de nuevo”; $_stWarningExpMultiTabs=”IMPORTANTE: no uses este módulo a las vez que otros módulos de PHPSEO en distintas pestañas”; $_deadDomsInfo=”(los dominios muertos no deben llevar http ni www)”; $_stExpiredWarning=”ADVERTENCIA: esta herramienta, como cualquier otro robot web, visitará muchas URL destino utilizando algunos de los recursos de su servidor. No deberías escanear siempre el mismo dominio para evitar ser baneado u otros problemas relacionados. Puedes utilizar los campos -Max Threads-, -Max URLs/domain- y -Max URLs/level- para reducir la cantidad de URL escaneadas. Utiliza esta herramienta bajo tu propio riesgo.”; $_stLicenseChecks=”

  • ✓ Sigue las redes sociales de PHPSEO para obtener tu código de licencia gratuito
  • ✓ No puedes comprar una licencia, todas las licencias distribuidas son gratuitas
  • ✓ Compartiré códigos de licencia de forma periódica, pero solo los seguidores más rápidos las obtendrán
  • ✓ Tras obtener un código, reclámalo en https://netgrows.com/es/licencia-expired-finder/ usando tu nombre y email
  • ✓ No compartas tus datos de licencia o podrían ser bloqueados
  • ✓ Lee más acerca de cómo obtener tu licencia gratuita
  • “; $_styouNeedLicense=”Necesitas una licencia válida”; $_stsaveString=”SALVAR”; $httpAlert=”Por favor, introduce algunas URLs con http / https”; $max100urls=”Por favor, introduce menos de 100 URLs semilla”; $pleaseWait=”Por favor, espera unos segundos hasta que finalice el proceso anterior”; $_pleaseIncrease1=”Por favor, incrementa el valor –maximum execution time– de tu servidor PHP para obtener mejores resultados (o ejecuta búsquedas más pequeñas).”; $_pleaseIncrease2=”Por favor, incrementa el valor –allowed memory size– de tu servidor PHP para obtener mejores resultados (o ejecuta búsquedas más pequeñas).”; $_stLinDupe=”BORRA LIN DUPE”; $_stLinVacias=”BORRA LIN VACÍAS”; $_stNoUsarSSL=”Por favor, usa esta funcionalidad en local o en una URL SIN https”; } else { //English $_welcometo=”Welcome to PHPSEO! Search a new keyword to start using the tool.”; $_keyword=”keyword”; $_optional=”optional”; $_search=”SEARCH”; $_titleURLscrapper=”URL scraper”; $_subtitleURLscrapper=”Search URLs by keyword, footprint, number of results & Google TLD”; $_titleKeywordTool=”Keyword generator”; $_subtitleKeywordTool=”Get keyword suggestions from Google, YouTube or Amazon based in any main keyword”; $_seedKeywordAtEnd=”Seed keyword at the end”; $_titleImageDownloaderBoth=”Bulk image downloader & editor”; $_titleImageDownloader=”Bulk image downloader”; $_titleImageEditor=”Bulk image editor”; $_subtitleImageDownloader=”Search images & download them”; $_subtitleImageEditor=”Select multiple images and modify them”; $_titleDataExtractor=”Data extractor”; $_subtitleDataExtractor=”Extract URLs, links, images,emails & any other content from multiple URLs”; $_titlePlagiCheck=”Plagiarism checker”; $_subtitlePlagiCheck=”Paste your text and check plagiarism using Google”; $_morewordreqString=”100 or more words required”; $_titleIndexedUrlCheck=”Indexed URL checker”; $_titleDomAuthChecker=”Domain authority checker”; $_titleMultiSeoTools=”Multi SEO tools”; $_subtitleIndexedUrlCheck=”Check if URLs are Google indexed in bulk”; $_titleProxyManager=”Proxy manager”; $_subtitleProxyManager=”Manage and create web proxies”; $_createaProxyServer=”CREATE A PROXY SERVER FILE”; $_typeaPassText=”Type a password & press CREATE”; $_createText=”CREATE”; $_newPassText=”new password”; $_downloadProxyFileText=”DOWNLOAD PROXY FILE”; $_proxyListText=”PROXY LIST”; $_proxyMiniHelp=”

    Here you define all the web proxies that you will create in different domains (web-proxy-list.txt file).

    • Keep in mind that you will need different IP addresses per each web proxy. If they are shared IP’s, they may be already blocked or showing captcha.
    • To create a new proxy, you only need to upload the file phpseo-proxy.php to any domain and then get the full URL address to that file.
      • Example: if I drop phpseo-proxy.php under the folder -testing- at mycooldomain.com, the proxy URL will be http://mycooldomain.com/testing/phpseo-proxy.php?password=YOURPASSWORD
      • For extra security, you may want to rename the file phpseo-proxy.php before uploading it.
    • After uploading the file, save the new web proxy to the list below (in a new line) with the format: PROXYNAME@@@PROXYURL?password=PASS.

    “; $_templateListText=”CUSTOM TEMPLATES”; $_templateListFormatText=”Template list format”; $_templateListHelp=”One template per line. After saving a new template, you will need to refresh the page to see it in the dropdown.”; $_titleDocumentation=”Documentation”; $_subtitleDocumentation=”PHPSEO help & documentation”; $_titleInfo=”Info”; $_titleMainSettings=”Main settings”; $_subtitleMainSettings=”Edit the main program settings”; $_extractedUrls=”EXTRACTED URLS”; $_extractedKeywords=”EXTRACTED KEYWORDS”; $_extractedImages=”EXTRACTED IMAGES”; $_urlList=”URL LIST”; $_seedurlList=”SEED URLS”; $_results=”RESULTS”; $_text=”TEXT”; $_removeDuplicate=”REMOVE DUPLICATE”; $_removeDuplicateDomains=”REMOVE DUPE DOMAIN”; $_zeroResultsMsg=”0 results. Make a new search, if no results, Google may be blocking you.”; $_containing=”containing”; $_notContaining=”not containing”; $_records=”records”; $_showingCache=”Showing cached results from previous search”; $_badProxy=”Bad proxy”; $_shufleLines=”SHUFFLE lines”; $_azOrderLines=”AZ lines order”; $_zaOrderLines=”ZA lines order”; $_ucAll=”UC ALL”; $_ucFirst=”UC FIRST”; $_upperCase=”UPPERCASE”; $_lowerCase=”LOWERCASE”; $_extractSelection=”Extract selection”; $_allLinks=”All links”; $_internalLinks=”Internal links”; $_externalLinks=”External links”; $_imageURLShard=”Image URLs (hard)”; $_imageURLSoft=”Image URLs (soft)”; $_emailAddress=”Email address”; $_urlPerBatch=”URLs/batch”; $_batchDelay=”Batch delay”; $_stWantMore=”Want more? Check PHPSEO PRO“; $_searchDelay=”Search delay”; $_sec=”sec”; $_remove=”Remove”; $mainSettingsIntroText=”Here you define the main PHPSEO settings (config.txt file).”; $langInfo=”lang defines the tool language. Currenly available: en/es. Reload the page after saving the changes.”; $howManyURLPerStepInfo=”howManyURLPerStep sets how many URLs the tool will check at once in each batch (each step).”; $batchDelaySecondsInfo=”batchDelaySeconds controls the seconds paused between each URL batch.”; $searchDelaySecondsInfo=”searchDelaySeconds controls the seconds paused between each different search query.”; $customUserAgentInfo=”customUserAgent defines the browser user agent used by all PHPSEO robots.”; $_chooseImg=”Choose one or more images”; $_applyoperImg=”Apply one or more operations”; $_flipString=”Flip”; $_noflipString=”no flip”; $_fliphorString=”flip horizontal”; $_flipvertString=”flip vertical”; $_flipbothString=”flip both”; $_resizeString=”Resize”; $_widthString=”Width”; $_qualityString=”JPG Quality”; $_noresizeString=”no resize”; $_reducesizeString=”reduce size to”; $_addtextString=”Add text”; $_textString=”Text”; $_texttoaddString=”text to add”; $_marleftString=”Margin Left”; $_martopString=”Margin Top”; $_fosizeString=”Font Size”; $_focolorString=”Font Color”; $_notextString=”no text”; $_addPhraseString=”add a phrase”; $_customFontString=”You can use a custom font by overwriting the file font.ttf located in the root folder”; $_addTextfromFileString=”Add text from file”; $_randomOrderString=”random order”; $_secuencialOrderString=”secuencial order”; $_eachlineWillBeString=”Each line from the file imagetext.txt will be used as a phrase. You can choose between adding sentences to the images in random or secuencial order.”; $_addWatermarkString=”Add watermark (image)”; $_noWatermarkString=”no watermark”; $_addaWatermarkString=”add a watermark”; $_theFileWatermarkString=”The file watermark.png in the main root will be used in this operation. You can use a new watermark by overwriting the file.”; $_marrightString=”Margin Right”; $_marbottomString=”Margin Bottom”; $_convertFormatString=”Convert format”; $_noConversionString=”no conversion”; $_convertToString=”convert to”; $_uploadEditString=”UPLOAD & EDIT”; $_uploadWaitString=”Processing the files…”; $_last100procString=”Last 100 processed images”; $_last100procFilesString=”Last 100 processed files”; $_deleteImagesString=”DELETE ALL FILES”; $_downloadAllString=”Download all”; $_trimToDomain=”Trim to domain”; $_textToDomain=”to domain”; $_procString=”Processed images”; $_procStringFiles=”Archivos procesados”; $notificationsTitle=”LATEST UPDATES”; $notificationsSubtitle=”PHPSEO notifications”; $autoUpdateTitle=”PHPSEO AUTO UPDATING…”; $autoUpdateAlreadyString=”You already have the last version of PHPSEO”; $autoUpdateFailedDownloadString=”Failed to download the update from”; $autoUpdateOkString=”PHPSEO updated successfully, click here.“; $proxyAlertString=’A new PHPSEO proxy server will be generated. nn1.Download the generated phpseo-proxy.php file (you can rename it for more security). nn2.Upload the file into any website folder. You will need the complete public URL of that file (including http/s). nn3. Add the file URL in the list below in the right format. You can see a sample of the format below. Do not forget to add your password as the final parameter.’; $_titleFootprints=’Footprints’; $_descFootprints=’Save new footprints in the format: Footprint Name@@@google command‘; $_manualCheckString=’MANUAL CHECK’; $_automaticCheckString=’AUTOMATIC CHECK’; $_selectPasteExcelString=’you can also select all & paste to excel’; $_downloadCSVString=’DOWNLOAD CSV’; $_setUpYourProxy=’Please, set up your own web proxy, you cannot use sample proxies.’; $_textUnique=’The text seems unique’; $_textNotUnique=’The text seems NOT unique’; $_noGoogleResults=’Google did not return any result, they probably blocked your IP address. Try using a proxy.’; $_bannedProxyString=”The proxy:nn$webproxynnseems to be banned by Google search. nnPlease, visit the bottom of this page and try to copy & paste the debug -Search URL- in a new browser tab.nnIf you are banned, you may need to wait some hours or try a different server/IP address.”; $_errorGD=’It seems that your PHP server does not have the GD extension available. You must install or enable it in your PHP server settings.’; $_msgFooter=’PHPSEO is a personal project by Juanma Rodríguez AKA Netgrows | Follow me in YouTube and Twitter to support the project 😊 | You are also welcome to the support group where we learn SEO together.’; /*New titles*/ $_titleGmbScrap=’GMB Data Extractor’; $_subtitleGmbScrap=’Get data from Google My Business using your current browser session.’; $_explainGmbScrap=’Hotels in New York’; $_titleBulkTranslator=’Bulk TXT Translator’; $_subtitleBulkTranslator=’Multiple TXT file translation using your current browser sesion.’; $_titleMasiveMail=’Masive eMail Sender’; $_subtitleMasiveMail=’Send emails to multiple recipients using Gmail, Outlook or Yahoo webmails.’; $_titleMasiveWhats=’Masive WhatsApp Web Poster’; $_subtitleMasiveWhats=’Send messages to WhatsApp contacts or groups using WhatsApp Web.’; $_titleMasiveTele=’Masive Telegram Web Poster’; $_subtitleMasiveTele=’Send messages to Telegram contacts or groups using Telegram Web.’; $_titleMasiveFb=’Masive Facebook Group Poster’; $_subtitleMasiveFb=’Post messages to Facebook groups automatically using your current browser session.’; $_titleCustomScraper=’Custom Data Scraper’; $_subtitleCustomScraper=’Scrape almost anything from any website using your current browser session.’; $_supportPhpseo=”PHP SEO is a free tool thanks to the support of the community.
    Do you want this video to be translated into English? Support our channel by subscribing with the bell and leaving a comment.”; $_phpseoExtMissing=”PHPSEO Chrome extension is not loaded. You need to install it before using this tool. You will also need to allow popups.”; $_titleGscInternalLinking=”GSC onpage internal linking”; $_subTitleGscInternalLinking=”Find internal link oportunities using Google Search Console. Create them using your wp_posts SQL WordPress file.”; $_titleFormFiller=”Contact Form Filler”; $_subtitleFormFiller=”Fill in HTML forms and submit them when they do not use captcha.”; $_sourceFilesTransStr=”SOURCE FILES TO BE TRANSLATED”; $_logTransStr=”TRANSLATION LOG”; $_uploadString=”UPLOAD FILES”; $_refreshFilesString=”REFRESH FILES”; $_deleteFilesString=”DELETE FILES”; $_last100translatedFilesString=”Last translated files”; $_chooseTxtOrCsv=”Choose your TXT or CSV files”; $_mergeOrConvert=”MERGE & CONVERT TEXT FILES”; $_subtitlemergeOrConvert=”Convert TXT lines to CSV columns and viceversa. Merge CSV & TXT files.”; $_dropFiles=”Drop Files Here”; $_titleMergeLinks=”MERGE”; $_subtitleMergeLinks=”Insert links inside any article using random words as anchor text”; $_articletoInsertMerge=”Article to insert links into”; $_stLinkDensity=”Link density”; $_stLinkDensityExplain=”A higher link density will cause the random links to be further away from each other, but will require a larger article”; $_titleExtractBlocks=”EXTRACT BLOCKS FROM HTML”; $_subtitleExtractBlocks=”Extract HTML tables or HTML code blocks based in any CSS attribute”; $extBlockInstructions=”

    1. Paste ALL the HTML source from any page. Example: view-source:https://getaawp.com/demo/

    2. Write a CSS selector of the main container of every block that you want to extract. Example: .aawp

    Usage: This would allow you to replace the Amazon Affiliate ID from the blocks and paste the HTML code directly in your own page.

    “; $extOnlyInner=”Extract only inner content”; $extFromBlocks=”Extracted HTML blocks”; $getHtmlFromUrl=”Get HTML from URL”; $_stOrPasteHtml=”or paste whole site source code here”; $_stBlocksWillAppear=”The extracted HTML blocks will appear here”; $_stOperation=”Operation”; $_urlyKeywords=”URLS & TEXT TOOLS”; $_suburlyKeywords=”Helpers for some common SEO operations”; $_deleteLinesThat=”DELETE LINES THAT CONTAIN”; $_subdeleteLinesThat=”Remove lines from list 1 that contain any of the lines from list 2″; $_words=”words”; $_characters=”characters”; $_removeLines=”REMOVE LINES”; $_htmlCode=”HTML code”; $_list1=”List 1 (source list)”; $_list2=”List 2 (words to check)”; $_csvSep=”CSV separator”; $_cssSelector=”CSS selector”; $_stPauseBetween=”Pause between steps (secs)”; $_stPauseBetweenURLs=”Pause between URLs (secs)”; $_getText=”GET”; $_domAuthCheck=”DOMAIN AUTHORITY CHECKER”; $_subdomAuthCheck=”Check domains SEO authority in bulk”; $_extBlocks=”EXTRACT BLOCKS”; $_mergeOpt1=”Merge TXT files”; $_mergeOpt2=”Merge CSV files”; $_mergeOpt3=”CSV to TXT (columns to lines)”; $_mergeOpt4=”TXT to CSV (lines to columns)”; $_expDomainFinder=”EXPIRED DOMAIN FINDER”; $_subexpDomainFinder=”Scan thousands of domains starting from some seed URLs”; $_stFindUseful=”You may find useful these acumulative files from previous scans: “; $_stAvaDoms=”Available domains”; $_stAvaDomsInfo=”Domains available for registration. You may get some false positives but accuracy should be high.”; $_stDeadDoms=”Dead domains”; $_stDeadDomsInfo=”Dead domains do not have websites on them, but they may be unavailable for registration.”; $_stUrlsSemilla=”Seed URLs”; $_stUrlsSemillaInfo=”Enter some URLS to start searching for dead domains. A dead domain is a domain with no active webpage.”; $_stYourLicensedEmail=”Licensed email”; $_stYourLicensedName=”Licensed name”; $_stUrlsStep=”URLs per step:”; $_stReloadPage=”Reload the page to start a new scan”; $_stWarningExpMultiTabs=”IMPORTANT: do not use this module at the same time as other PHPSEO modules in different tabs”; $_deadDomsInfo=”(dead domains should not contain http or www)”; $_stExpiredWarning=”WARNING: this tool, as any other web bot, will visit a lot of target URLs using some of their server resources. You should not target always same domain to avoid being banned or other related problems. You can use the fields -Max Threads-, -Max URLs/domain- and -Max URLs/level- to reduce the amount of scanned URLs. Use this tool at your own risk.”; $_stLicenseChecks=”

  • ✓ Follow PHPSEO social networks to get your free license code
  • ✓ You cannot buy a license, all the distributed licenses are free
  • ✓ License codes are periodically shared, but only the faster followers will get them
  • ✓ After getting a code, claim it at https://netgrows.com/get-expired-finder/ using your name & email
  • ✓ Do not share your license data or it could be blocked
  • ✓ Read more about how to get my free license
  • “; $_styouNeedLicense=”You need a valid license”; $_stsaveString=”SAVE”; $pleaseWait=”Please, wait a few seconds until the previous process finish”; $httpAlert=”Please, enter some URLs with http/https”; $max100urls=”Please, enter less than 100 source URLs”; $_pleaseIncrease1=”Please, increase the –maximum execution time– of your PHP server to get better results (or you can do smaller searches).”; $_pleaseIncrease2=”Please, increase the –allowed memory size– of your PHP server to get better results (or you can do smaller searches).”; $_stLinDupe=”DEL DUPE LINES”; $_stLinVacias=”DEL EMPTY LINES”; $_stNoUsarSSL=”Please, use this functionality locally or in a URL WITHOUT https”; } /**************************/ /*End string translations*/ /************************/ function preFooter($videoId){ global $langSelected;global $_supportPhpseo; if ($langSelected==”es”) { $redes =” 🗸 Apoya PHPSEO suscribiéndote en YouTube 🗸 Apoya PHPSEO siguiéndome en Twitter 🗸 Grupo de soporte y ayuda en Facebook “; } else { $redes =” 🗸 Support PHPSEO by subscribing our Youtube Channel 🗸 Support PHPSEO following me on Twitter 🗸 Join help & support Facebook group “; } return ”

    $_supportPhpseo

    $redes “; } if ($module==”plagichecksubmit”) { $textContent=$_POST[‘data’]; $webproxy=$_POST[‘webproxy’]; if (!empty($textContent)){ $words = explode(‘ ‘, $textContent); $numWords=count($words); $substringRandom=join(‘ ‘, array_slice($words, mt_rand(0, $numWords – 1), mt_rand(1, $numWords))); $substringRandom=trim(substrwords($substringRandom,120)); $substringRandom=urlencode($substringRandom); $urltoCheck=”https://google.com/search?q=%22$substringRandom%22&hl=en”; if ($webproxy==”noproxy”) { $results = getPageGoogle(”,$urltoCheck, ”, $customUserAgent, 1, 25); } else { $urlDefinitiva=$webproxy.”&getPage=”.$urltoCheck; $results = getPageGoogle(”,$urlDefinitiva, ”, $customUserAgent, 1, 25); } $arraydatos=$results[‘EXE’]; if (strpos($arraydatos,”No results found for”) !== false) { echo “”; echo “

    $_manualCheckString

    $_textUnique :) “; } elseif ((strpos($arraydatos,”About”) !== false)||(strpos($arraydatos,”result”) !== false)) { echo “”; echo “

    $_manualCheckString

    $_textNotUnique :( “; } else { echo “

    ERROR

    $_noGoogleResults”; } } exit; } if ($module==”emailLicenciasubmit”) { $resetlic=$_GET[‘resetlic’]; $resetlogfiles=$_GET[‘resetlogfiles’]; if ($resetlic==1) { unlink(“savedlinks/licensemail.txt”); unlink(“savedlinks/licensename.txt”); } elseif ($resetlogfiles==1) { unlink(“savedlinks/dead-domains-whois-not-supported.txt”); unlink(“savedlinks/dead-domains-not-available.txt”); } else { $data1=$_POST[‘data1’]; file_put_contents(“savedlinks/licensemail.txt”,$data1); $data2=$_POST[‘data2’]; file_put_contents(“savedlinks/licensename.txt”,$data2); } exit; } if ($module==”gethtmlfrompage”) { $urlToExtractHtmlFrom=trim($_POST[‘data’]); $webproxy=$_POST[‘webproxy’]; if (!empty($urlToExtractHtmlFrom)){ $urltoCheck=$urlToExtractHtmlFrom; if ($webproxy==”noproxy”) { $results = getPageGoogle(”,$urltoCheck, ”, $customUserAgent, 1, 25); } else { $urlDefinitiva=$webproxy.”&getPage=”.$urltoCheck; $results = getPageGoogle(”,$urlDefinitiva, ”, $customUserAgent, 1, 25); } echo $results[‘EXE’]; } exit; } /**************/ /*Auto update*/ /************/ if ($module==”autoupdate”){ //Delete cookies in future for welcome and changelog ?> PHPSEO autoupdate



    spider
    loader

    “;
    ?>




    >>>>>>>>>>>


    : | : | : | Mem limit: | Exec time:

    URL SCRAPER







    >


    MULTI TOOLS

    ¡Bienvenid@ a PHPSEO!

    ¡Bienvenid@ a PHPSEO! una herramienta SEO gratuita creada con mucho amor 🙂

    Soy Juanma, un SEO español que también programa un poquito de PHP y con un par de décadas de experiencia haciendo estas cosas. Con PHPSEO pretendo crear un reemplazo chulo de muchas otras herramientas y scripts personalizados que pueden ser útiles para SEO.

    Recuerda que si me sigues en Twitter o YouTube, publicaré contenidos chulos como footprints, plantillas para el extractor de contenidos o encuestas para ver qué queréis en próximos updates 🙂

    Características principales

    • 100% gratis: URL scraper, extractor de datos en bulk, generador de keywords, descargar y editar imágenes en bulk, detector de plagio y detector de URLs indexadas en bulk..
    • Puedes usar IPs de sitios web en lugar de proxies (proxies web).
    • Crea tu propio proxy en cualquier hosting web.
    • Si tienes acceso a muchos hostings o PBNS, con PHPSEO puedes usarlos como una red de proxies gratis.
    • No necesita instalación, no necesita base de datos.
    • Todo en un único fichero PHP portable. Toda la configuración se almacena en ficheros .txt y .json autogenerados.
    • Un servidor local (por ejemplo, Xampp) es muy recomendable, pero no obligatorio. Solo ubica el fichero phpseo.php en cualquier servidor FTP y empieza a trabajar.

    Crea y usa proxies web

    Usa proxies web desde tu hosting

    PHPSEO te permite crear y usar tus propios proxies alojándolos en tu proveedor de hosting web.

    Solo necesitas escribir un password, generar el fichero phpseo-proxy.php y ubicarlo en alguna carpeta de cualquier sitio web.

    Ten en cuenta que necesitarás una dirección IP diferente para cada hosting. Si son IPs compartidas, pueden estar ya bloqueadas o solicitando un captcha..

    ¿Cómo crear un nuevo proxy?
    1. Visita el Gestor de Proxies aquí.
    2. Escribe un nuevo password y pulsa CREAR y después DESCARGAR FICHERO PROXY.
    3. Sube el fichero phpseo-proxy.php a un sitio web y obtén la URL completa del archivo, incluyendo el parámetro con el password.
    4. Añade tu nuevo proxy a la lista (en una nueva línea) y pulsa el botón SALVAR.

    Formato de ficheros proxy: Proxy name @@@ https://yourdomain.com/anyfolder/phpseo-proxy.php?password=YOURPASSWORDHERE


    Busca palabras clave en Google, obtén hasta 400 resultados. Es recomendable elegir un máximo de 300 (la mayoría de búsquedas no devolverán 400).

    Puedes usar una footprint de forma opcional para filtrar los resultados de búsqueda.

    PHPSEO te permite elegir entre diferentes footprints por defecto. También puedes agregar footprints personalizadas desde la sección -ajustes generales-.

    Usando esta herramienta puedes extraer de forma masiva (múltiples URLs) todos los links, links internos, links externos, URLs de imágenes (hard y soft mode), direcciones de email y casi cualquier otro tipo de contenido utilizando plantillas personalizadas.

    ¿Cómo crear plantillas personalizadas?

    Las plantillas personalizadas te permiten extraer cualquier contenido de muchas URLs a la vez. Debes definir los marcadores del inicio -begin- y del final -end- para cada campo que quieras scrapear.

    Puedes crear y salvar nuevas plantillas utilizando el fichero content-extractor-templates.txt

    Agrega nuevas plantillas, una por cada línea, siguiendo el formato a continuación. Puedes crear tantas plantillas como quieras con tantos campos cada una como quieras.


    Formato de las plantillas: Template name @@@ field1 ### beginfield1 ### endfield1 @@@ field2 ### beginfield2 ### endfield2 @@@ field3 ### beginfield3 ### endfield3


    Fijándonos en el formato anterior, utilizarás dos clases de separadores, “@@@” para separar el nombre de la plantilla y cada nuevo campo, y “###” para separar el nombre del campo de sus marcadores inicio -begin- y final -end-.

    PHPSEO usa expresiones regulares para encontrar el contenido en el extractor de datos. Si no puedes obtener un contenido, es recomendable probar la regex en regex101.com hasta que funcione.

    Ejemplo de regex: begin([sS]*?)end/s

    Exportar los datos scrapeados

    Si estás extrayendo URLS, emails u otro contenido tipo lista, verás los resultados como lo haces en otros módulos.

    Si estás extrayendo contenido usando una plantilla personalizada, puedes guardar el contenido como txt, csv o xlsx.

    • txt: exporta múltiples ficheros txt (uno por cada URL scrapeada).
    • csv: exporta un fichero CSV que contiene todo el contenido extraído.
    • xlsx: export one XLSX (excel) que contiene todo el contenido extraído.

    Introduce una palabra clave para obtener sugerencias relacionadas de Google, Amazon o YouTube.

    Esta herramienta mostrará las subconsultas de la A a la Z de Google suggest, usando como semilla tu palabra clave principal al inicio de cada sugerencia. Puedes usar el símbolo * como comodín en Google.

    Introduce una palabra clave para extraer las URLs de las imágenes mostradas en Google imágenes. También puedes pegar URLs de imágenes obtenidas del módulo extractor de datos o de cualquier otra fuente.

    Usa el botón -DOWNLOAD IMGs- para descargar un fichero .zip que contenga todas las imágenes (puede tardar si usas muchas URLs).

    Selecciona múltiples imágenes y elige una o varias operaciones de edición para aplicar de forma masiva. Puedes añadir textos diferentes usando el fichero imagetext.txt, y modificar fuentes, tamaños, marcas de agua, etc.

    También puedes convertir cualquier formato de imágenes a JPG, PNG, GIF o WEBP.

    Pega un texto de al menos 100 palabras y comprueba si un fragmento aleatorio aparece como texto duplicado en Google.

    La comprobación automática comprueba un fragmento aleatorio. La comprobación manual te muestra 3 botones para comprobar 3 fragmentos aleatorios de forma manual.

    Pega una lista de URLs (una por línea) y comprueba si están indexadas en Google.

    Puedes descargar los resultados de indexación en formato CSV o copiar los resultados del textarea y pegarlos en una hoja de cálculo tipo excel.

    Analiza la autoridad SEO de múltiples dominios de forma masiva.

    Los resultados obtenidos se basan en la autoridad de Web Archive y Majestic SEO (gráfico de trust flow y citation flow).

    El nuevo módulo premium solo para seguidores. No está a la venta, pero puedes conseguir una licencia fácilmente aquí

    Escanea miles de dominios en busca de expirados a partir de unas URLs origen. Localiza dominios expirados con backlinks y autoridad SEO, disponibles para ser registrados.

    Multi Tools

    La colección de herramientas que todo SEO ha necesitado alguna vez. Un módulo con multitud de herramientas que pueden ayudarte en trabajos SEO.

    Texto y keywords: contar cantidad de palabras y caracteres, convertir URLs a links HTML, extraer URLs de contenido HTML, extraer imágenes de contenido HTML, borrar líneas duplicadas, borrar líneas vacías, convertir líneas a spintax, convertir spintax a líneas, convertir spintax a valores separados por comas, convertir líneas a valores separados por comas, convertir valores separados por comas a líneas, convertir valores separados por comas a spintax, convertir primera letra de cada palabra a mayúscula, convertir primera letra de cada línea  a mayúscula, convertir todo a mayúsculas, convertir todo a minúsculas, ordenar líneas AZ, ordenar líneas ZA, ordenar líneas aleatoriamente.

    Borrar líneas de la lista 1 que contienen alguna línea de la lista 2.

    Inserta links en cualquier artículo usando palabras aleatorias como anchor text.

    Extrae tablas o bloques HTML basados en un atributo CSS.

    Convierte líneas de TXT a columnas CSV y viceversa. Fusiona ficheros CSV y TXT.

    Requisitos del sistema

    • PHPSEO version: .
    • Probado: PHP 5.6.402.0 y superiores.
    • Variable max execution time mínima recomendada: 240 segundos, (tu max exec time actual es ).

    Soporte y ayuda

    Si tienes dudas o problemas con PHPSEO, te recomiendo unirte al grupo de ayuda en Facebook y publicar allí tu pregunta.

    Para preguntas cortas o rápidas, puedes encontrarme en Twitter y YouTube.

    PHPSEO, por el momento es 100% gratis y BETA, así que me ayudarás mucho si reportas cualquier error.

    No me odies si tienes problemas, recuerda no abusar demasiado de los recursos de tu hosting y todo debería de ir bien 🙂

    Preguntas frecuentes

    ¿Por qué la herramienta no termina un proceso? (se cuelga o congela)

    Problema: si el ciclo de avisos “Processing URL batch” parece no terminar nunca, probablemente tu servidor está sobrecargado y no responde a las peticiones.

    Solución: si estás haciendo operaciones con muchas URLs, instala Xampp u otro servidor local y utiliza PHPSEO en local. Recuerda incrementar el max execution timeout y/o otras settings que puedan ser demasiado bajas en tu servidor local.

    También puedes incrementar la -pausa entre bloques- y disminuir las -URL/s por bloque- en los ajustes generales para mitigar este problema.

    ¿Puedo usar proxies normales (no web) con PHPSEO?

    A pesar de que ni los he probado ni es la intención de esta herramienta, deberías poder usarlos fácilmente modificando los ficheros proxy siguiendo estas indicaciones.

    ¿Puedo usar los web proxies con la IP de un dispositivo móvil?

    Existen varias aplicaciones para montar servidores PHP en dispositivos móviles. No he llegado a probarlas con PHPSEO, pero si conseguimos obtener una URL pública mediante esas aplicaciones, y estas incorporan las extensiones básicas como cURL, debería ser posible usar la IP de datos móvil como proxy web.

    Si alguien prueba y consigue usar el móvil como web proxy, estaré encantado de escuchar su feedback :).

    ¿Necesito usar un servidor local con PHPSEO?

    No es imprescindible (pero sí recomendable) usar PHPSEO con un servidor PHP local. Para ello, lo mejor es instalar XAMPP, lo que nos permitirá incrementar las variables Execution Time, Upload Size y similares tanto como deseemos.

    Welcome to PHPSEO

    Welcome to PHPSEO! a free SEO tool made with a lot of love 🙂

    I’m Juanma, an Spanish SEO with some coding knowledge and 20+ years experience doing this kind of things. By creating PHPSEO I’m trying to provide a cool replacement for a lot other tools and custom scripts that may be useful for SEO purposes.

    You can follow me in Twitter or YouTube to get cool contents like footprints, content extractor templates or vote for the next updates 🙂

    Main features

    • Free URL scraper, bulk URL data extractor, keyword generator, bulk image downloader & editor, plagiarism checker & indexed URL checker.
    • Use website IPs instead of proxies (web proxies).
    • Create your own proxy in any hosting provider.
    • Do you own multiple hostings or PBNs? You can use them as a free proxy network with PHPSEO!
    • No installation needed, no database.
    • Everything is contained in a single PHP portable file. All config is stored in auto generated .txt and .json files.
    • Local server (e.g. Xampp) is recommended but not required. Just paste/upload phpseo.php file to any PHP server and start working.

    Create & use web proxies

    Use free web proxies!

    PHPSEO allows you to create and use your own free proxies by hosting them in any web hosting provider.

    You just need to set a password and create a new copy of the file phpseo-proxy.php. Upload it so any website folder.

    Keep in mind that you will need different IP addresses per hosting. If they are shared IP address hostings, they may be already banned from the search engines (or asking a captcha).

    How to create a new web proxy?
    1. Visit the Proxy Manager here.
    2. Set up a new password and press CREATE and DOWNLOAD PROXY FILE.
    3. Upload the phpseo-proxy.php file to any website and get the full URL of that file including the password parameter.
    4. Save your new proxy to the list using SAVE button.

    Proxy file format: Proxy name @@@ https://yourdomain.com/anyfolder/phpseo-proxy.php?password=YOURPASSWORDHERE


    Search keywords in Google, get up to 400 results. It is better so set a max of 300 results (most keywords will not return 400).

    You can use a footprint to filter the search results.

    PHPSEO allows you to choose between different default footprints. You can also add custom footprints in the -main settings-.

    By using this tool you can extract: all links, internal links, external links, image URLs (hard and soft mode), email address and almost any other content using custom templates.

    How to create custom templates?

    Custom templates allow you to extract any content from multiple URLs, by setting up -begin- and -end- markers for every field that you want to scrape.

    You can create and save new templates using the file content-extractor-templates.txt

    Add new templates, one per line, following the format below. You can create as many templates as you want with as many fields as you need.


    Template format: Template name @@@ field1 ### beginfield1 ### endfield1 @@@ field2 ### beginfield2 ### endfield2 @@@ field3 ### beginfield3 ### endfield3


    So you will use two kind of separators, “@@@” to separate the template name and every new field, and “###” to separate the field name from the -begin- and -end- markers.

    PHPSEO uses regular expressions to find content in the content extractor module. If you cannot get a content, we recommend you to try the regex at regex101.com until it works.

    Regex sample: begin([sS]*?)end/s

    Exporting the scraped data

    If you are extracting URLs, you will see and manage them as in any other module.

    If you are extracting content using a custom template, you will be able to save your content as txt, csv or xlsx formats.

    • txt: export multiple txt files (one per URL)
    • csv: export one CSV file containing all the extracted content
    • xlsx: export one XLSX (excel) file containing all the extracted content.

    Enter a keyword to get all the Google related suggestions.

    This tool will loop from A to Z in Google suggestions using your main keyword as the beginning of every suggestion. You can use * symbol as a normal Google wildcard.

    Enter a keyword to extract related Google Images URLs. Optionally, clean the list or remove duplicate URLs. You can also paste image URLs extracted from data extractor module or any other sources.

    Use the -DOWNLOAD IMGs- button to download a .zip file containing all the images.

    Select multiple images and apply edition effects over them. You can add different texts using the file imagetext.txt and use different fonts, watermarks, sizes…

    You can also convert any image to JPG, PNG, GIF or WEBP.

    Paste a text of 100 words or more and check plagiarism against Google results using random sentences.

    The automatic check will use one random text fragment. The manual check will show you three buttons to manually check three different random fragments.

    Paste a list of URLs (one per line) and check if they are Google indexed.

    You can download the results in CSV format and/or copy the results from the textarea and paste them to a spreadsheet.

    Analyze the SEO authority of multiple domains in bulk.

    The results obtained are based on the authority of the Web Archive and Majestic SEO (trust flow and citation flow graph).

    The new premium module for followers only. Not for sale, but you can easily get a license here

    Scan thousands of domains in search of expired ones from some source URLs. Locate expired domains with backlinks and SEO authority, available for registration.

    The collection of tools that every SEO has ever needed. A module with a multitude of tools that can help you in SEO work.

    Text and keywords: count number of words and characters, convert URLs to HTML links, extract URLs from HTML content, extract images from HTML content, delete duplicate lines, erase empty lines, convert lines to spintax, convert spintax to lines, convert spintax to comma separated values, convert lines to comma separated values, convert comma separated values to lines, convert comma separated values to spintax, convert first letter of each word to uppercase, convert first letter of each line to uppercase, convert all to uppercase, convert all to lowercase, sort lines AZ, sort lines ZA, sort lines randomly.

    Delete lines from list 1 that contain any lines from list 2.

    Insert links in any article using random words as anchor text.

    Extract tables or HTML blocks based on a CSS attribute.

    Convert lines from TXT to CSV columns and vice versa. Merge CSV and TXT files.

    System requirements

    • PHPSEO version: .
    • Tested: PHP 5.6.402.0 and up.
    • Server max execution time recommended: 240 seconds, (current timeout ).

    Get support

    If you have questions or problems when using PHPSEO, I recommend you to join the Facebook support group and publish your question there.

    For fast questions, you can find me at Twitter & YouTube.

    Currently, PHPSEO is 100% free and BETA, so you will help me reporting any problem.

    Do not hate me if you have problems, do not abuse your hosting provider resources and everything should be fine 🙂

    F.A.Q.

    Why the tool is not finishing the batch process? (freezes)

    Problem: if the “Processing URL batch” cycle seems to never end, probably your server is overloaded and is not responding to requests.

    Solution: if you are making heavy operations with a lot of URLs, install Xampp or other local web server and use PHPSEO in your local computer. Remember to increase the local sever max execution timeout and other default settings if needed.

    You can also increase the -batch delay- setting & decrease -blocks per batch- setting to mitigate this problem.

    Can I use normal proxies (no web) with PHPSEO?

    It is not tested, anyway, you should be able to do it by editing the PHP proxy files following these instructions.

    Can I use my phone IP as a web proxy?

    There are multiple apps that allow you to run a PHP web server in your mobile devices. I have not tested it, but if you can obtain a public URL, and this apps have the basic PHP extensions like cURL, it should work.

    If you are skilled enough to make it work, I will be happy to hear your feeedback :).

    Do I need a local server to use PHPSEO?

    It is not mandatory, but I recommend it. Using a local server like XAMPP will allow you to easily increase Execution Time or Upload Size settings to higher values.


    (time() – 60 * 1440 ))) {
    $lastNews=file_get_contents($cache_file_not);
    } else {
    $lastNews=file_get_contents($urlNoti);
    file_put_contents($cache_file_not, $lastNews, LOCK_EX);
    }
    $arrayNews = explode(“n”,$lastNews);
    foreach ($arrayNews as $noticia){
    $elementosNoticia = explode(“|||”,$noticia);
    $cuentaElementos=1;
    foreach ($elementosNoticia as $elemento){
    if ($cuentaElementos==1) echo “”.$elemento.””;
    if ($cuentaElementos==2) echo “”.$elemento.””;
    if ($cuentaElementos==3) echo “”.$elemento.””;
    if ($cuentaElementos%3==0) $cuentaElementos=1;
    $cuentaElementos++;
    }
    }
    ?>




    $_textToDomain
    $_containing
    $_notContaining

    “;
    }
    function buttonSRightTextareaNoDomainTrim($idTextArea){
    global $_downloadAllString, $_remove, $_containing, $_notContaining;
    echo ”


    $_containing
    $_notContaining

    “;
    }
    function buttonSRightTextareaMini($idTextArea){
    global $_downloadAllString, $_remove, $_containing, $_notContaining;
    echo ”


    $_containing
    $_notContaining

    “;
    }
    ?>
    $maxchar || $text == ”) {
    $words = preg_split(‘/s/’, $text);
    $output = ”;
    $i = 0;
    while (1) {
    $length = strlen($output)+strlen($words[$i]);
    if ($length > $maxchar) {
    break;
    }
    else {
    $output .= ” ” . $words[$i];
    ++$i;
    }
    }
    $output .= $end;
    }
    else {
    $output = $text;
    }
    return $output;
    }
    function sanitizeURL($url){
    $url=str_replace(‘”‘, “”, $url);
    $url=str_replace(”’, “”, $url);
    //if (((substr($url, 0, 7) == ‘http://’)||(substr($url, 0, 8) == ‘https://’))&&(strpos($url, ‘.’) !== false)&&(strpos($url, ‘ ‘) == false)&&(trim($url) !== “https”)&&(trim($url) !== “http”)&&(strpos($url, ‘\’) !== false)&&(strpos($url, ‘.gov’) !== false)&&(strpos($url, ‘.gob’) !== false)){
    if (((substr($url, 0, 7) == ‘http://’)||(substr($url, 0, 8) == ‘https://’))&&(strpos($url, ‘.’) !== false)&&(strpos($url, ‘ ‘) == false)&&(trim($url) !== “https”)&&(trim($url) !== “http”)){
    if ((strpos($url, ‘.google.’) !== false)||(strpos($url, ‘.googleusercontent.’) !== false)||(strpos($url, ‘.gstatic.’) !== false)) {
    return false;
    } else {
    if ((strpos($url, ‘.jpg’) !== false)||(strpos($url, ‘.png’) !== false)||(strpos($url, ‘.jpeg’) !== false)) {
    if ((strlen($url)) >= 15) {
    return $url;
    }
    }
    else return $url;
    }
    } else return false;
    }
    function sanitizeURLExpired($url){ //usado para limpiar array de URLs antes de multicurl
    $url=str_replace(‘”‘, “”, $url);
    $url=str_replace(”’, “”, $url);
    if (((substr($url, 0, 7) == ‘http://’)||(substr($url, 0, 8) == ‘https://’))&&(strpos($url, ‘.’) !== false)&&(strpos($url, ‘ ‘) == false)&&(trim($url) !== “https”)&&(trim($url) !== “http”)){
    if ((strpos($url, ‘.google.’) !== false)||(strpos($url, ‘.googleusercontent.’) !== false)||(strpos($url, ‘.gstatic.’) !== false)||(strpos($url, ‘twitter.com’) !== false)||(strpos($url, ‘amzn.’) !== false)||(strpos($url, ‘youtube.com’) !== false)||(strpos($url, ‘.gov’) !== false)||(strpos($url, ‘.gob’) !== false)) {
    return false;
    } else {
    if ((strpos($url, ‘.jpg’) !== false)||(strpos($url, ‘.png’) !== false)||(strpos($url, ‘.jpeg’) !== false)) {
    if ((strlen($url)) >= 15) {
    return $url;
    }
    }
    else return $url;
    }
    } else return false;
    }
    function cleanExpiredDomain($url){ //usado para limpiar array de URLs antes de multicurl
    if ((strpos($url, ‘.’) !== false)&&(strpos($url, ‘ ‘) == false)&&(trim($url) !== “https”)&&(trim($url) !== “http”)){ //tiene punto, no tiene espacio, no es solo prefijo
    if ((strpos($url, ‘.google.’) !== false)||(strpos($url, ‘.googleusercontent.’) !== false)||(strpos($url, ‘.gstatic.’) !== false)||(strpos($url, ‘twitter.com’) !== false)||(strpos($url, ‘amzn.’) !== false)||(strpos($url, ‘youtube.com’) !== false)||(strpos($url, ‘.gov’) !== false)||(strpos($url, ‘.gob’) !== false)||(strpos($url, ‘.edu’) !== false)||(strlen($url) <= 6)||(strpos($url, '.') == false)) { //||(strpos($url, '.') == false) return false; } else { return $url; } } else { return false; } } function showData_ExtractorTemplatesOptions(){ $allTemplates = file_get_contents('content-extractor-templates.txt'); $cuentaIteration=1; foreach(preg_split("/((r?n)|(rn?))/", $allTemplates) as $line){ echo "“;
    $cuentaIteration++;
    }
    }
    function showData_Footprints(){
    $allFootprints = file_get_contents(‘footprints.txt’);
    $cuentaIteration=1;
    foreach(preg_split(“/((r?n)|(rn?))/”, $allFootprints) as $line){
    $partesFootprint=explode(“@@@”,$line);
    $tituloFootprint=$partesFootprint[0];
    $footPrint=$partesFootprint[1];
    echo ““;
    $cuentaIteration++;
    }
    }
    function getData_ExtractorTemplates($templateid){ //id is the number of line in the txt file
    $partesString=””;
    $allTemplates = file_get_contents(‘content-extractor-templates.txt’);
    $cuentaIteration=1;
    foreach(preg_split(“/((r?n)|(rn?))/”, $allTemplates) as $line){
    if (“template-$cuentaIteration”==$templateid) {
    $partesString=$line;
    }
    $cuentaIteration++;
    }
    return $partesString;
    }
    function showProxies($webproxy){
    $allProxies = file_get_contents(‘web-proxy-list.txt’);
    $cuentaIteration=1;
    foreach(preg_split(“/((r?n)|(rn?))/”, $allProxies) as $line){
    $partesProxy=explode(“@@@”,$line);
    $nombreProxy=$partesProxy[0];
    $urlProxy=$partesProxy[1];
    if ($webproxy==$urlProxy) echo ““;
    $cuentaIteration++;
    }
    }
    /**************/
    /*MAIN THREAD*/
    /**************/
    $bannedProxy=false;
    $cacheJson=false;
    /*if (!empty($query)) {*/
    if ((!isset($_SESSION[‘optionz’]))&&(!empty($query)))$_SESSION[‘optionz’]=”first-call”;
    if ((isset($_SESSION[‘optionz’]))&&($_SESSION[“optionz”]==$optionz)) {
    //Misma opción que antes
    $_SESSION[“optionz”]=$optionz;
    } elseif (!empty($query)) {
    //Distinta opción, reseteamos json
    $_SESSION[“optionz”]=$optionz;
    file_put_contents(“search.json”, “”);
    }
    if ((!isset($_SESSION[‘keyword’]))&&(!empty($query))) $_SESSION[‘keyword’]=”first-call”;
    if ((isset($_SESSION[‘keyword’]))&&($_SESSION[“keyword”]==$query)) {
    //Misma opción que antes
    $_SESSION[“keyword”]=$query;
    } elseif (!empty($query)) {
    //Distinta keyword, reseteamos json
    $_SESSION[“keyword”]=$query;
    file_put_contents(“search.json”, “”);
    }
    /***********/
    /*HOMEPAGE*/
    /**********/
    if ($module==””){
    ?>

    >

    .


    >

    .


    >

    .


    >

    . .


    >

    .


    >

    .


    >


    >


    >
    MULTI TOOLS


    >

    .


    >

    .


    >

    .


    (time() – 60 * 1440 ))) {
    echo $fileCache=file_get_contents($cache_file);
    } else {
    echo $fileCache=file_get_contents($url);
    file_put_contents($cache_file, $fileCache, LOCK_EX);
    }
    ?>

    ÚLTIMOS TWEETS
    Tweets by netgrows
    ÚLTIMOS VÍDEOS


    LATEST TWEETS
    Tweets by Netgrows EN
    LATEST VIDEOS


    $getcontents


    “;
    $results = getPageGoogle(”,$getcontents, ”, $customUserAgent, 1, 25);
    $arraydatos=$results[‘EXE’];
    //Check if banned
    if (preg_match(“/unusual traffic/i”, $arraydatos)) {
    $bannedProxy=true;
    } else {
    if (preg_match(“/href/i”, $arraydatos)) {
    $bannedProxy=false;
    } else $bannedProxy=true;
    }
    if ($debugSearchDisplay) echo $arraydatos;
    $dom = new DOMDocument();
    @$dom->loadHTML($arraydatos);
    $xpath = new DOMXPath($dom);
    echo “
    “;
    $hrefs = $xpath->evaluate(“/html/body//a”);
    for ($i = 0; $i < $hrefs->length; $i++) {
    $href = $hrefs->item($i);
    $url = $href->getAttribute(‘href’);
    //Solo guarda URLs válidas
    if (sanitizeURL($url)){
    $arrayurl[$i]=$url;
    $arrayjson[$i] = array(
    ‘url’ => $arrayurl[$i]
    );
    }
    }
    //guarda json de la búsqueda (cache)
    if (isset($arrayjson)) $json_data = json_encode($arrayjson);
    if (isset($json_data)){ if ($json_data!=”null”) file_put_contents(‘search.json’, $json_data);}
    else file_put_contents(“search.json”, “”);
    }
    elseif (($pagina>1)&&(!empty($query)))
    {
    //hace búsqueda en bucle con delay
    $urlsAcumuladas=””;
    for ($i = 1; $i <= $pagina; $i++) { if (isset($pagina)) { $searchPageStarts=($i-1)*100; if ($webproxy!="noproxy") { $getcontents=$webproxy."&query=$keybusqueda&searchPageStarts=$searchPageStarts&googleRegion=$googleRegion"; } else $getcontents="https://$googleRegion/search?q=$keybusqueda&ion=0&num=100&start=$searchPageStarts"; } else echo "ERROR CHUNGO"; //echo "
    Loop $i, total $pagina
    “;
    $results = getPageGoogle(”,$getcontents, ”, $customUserAgent, 1, 25);
    $arraydatos=$results[‘EXE’];
    //Check if banned
    if (preg_match(“/unusual traffic/i”, $arraydatos)) {
    $bannedProxy=true;
    } else {
    if (preg_match(“/href/i”, $arraydatos)) {
    $bannedProxy=false;
    } else $bannedProxy=true;
    }
    if ($debugSearchDisplay) echo $arraydatos;
    $dom = new DOMDocument();
    @$dom->loadHTML($arraydatos);
    $xpath = new DOMXPath($dom);
    $hrefs = $xpath->evaluate(“/html/body//a”);
    for ($j = 0; $j < $hrefs->length; $j++) {
    $href = $hrefs->item($j);
    $url = $href->getAttribute(‘href’);
    if (sanitizeURL($url)) $urlsAcumuladas.=sanitizeURL($url).”n”;
    }
    $debug.=”Search made:


    $getcontents


    “;
    sleep ($searchDelaySeconds);
    }
    $arrayurl=explode(“n”,$urlsAcumuladas);
    if (isset($urlsAcumuladas)) $json_data = json_encode($arrayurl);
    }
    elseif ($module==”urlscraper”) {
    //Saca datos del json
    $debug.=”Search extracted from previous json cache


    “;
    $json = json_decode(file_get_contents(‘search.json’), true);
    //print_r($json);
    $cuentaurl=1;
    $cacheJson=true;
    if ($json) {
    foreach ($json as $arraysearch){
    $arrayurl[$cuentaurl]=$arraysearch[‘url’];
    $cuentaurl++;
    }
    } else {
    echo ‘

    ‘.$_welcometo.’
    ‘;
    }
    }
    }
    if ($module==”urlscraper”){
    echo ”
    $_extractedUrls
    “;
    if ((!$bannedProxy)&&(!$cacheJson)){
    echo “Good proxy “;
    } else{
    if ($cacheJson) echo “$_showingCache “;
    else echo “$_badProxy “;
    }
    echo “
    “;
    echo “”;
    buttonSRightTextarea(‘txtArea’);
    echo ”
    “;
    echo “

    “;
    if ($langSelected==”es”) echo preFooter(“yamsYi8pb-g”);
    else echo preFooter(“X47jANIXAK8”);
    echo “”;
    }
    /******************/
    /*KEYWORDS MODULE*/
    /****************/
    if ($module==”keywords”) {
    $keyword=$mainkwsuggest;
    echo ”
    $_extractedKeywords
    “;
    echo “
     
     
     
     “;
    echo “”;
    buttonSRightTextareaNoDomainTrim(‘txtArea’);
    echo ”
     

     

    Keyword Monthly Traffic Country

    $_downloadCSVString
    “;
    if ($langSelected==”es”) echo preFooter(“4Kwlgj-38y0”);
    else echo preFooter(“nBluYe00uxY”);
    echo “”;
    }
    /****************/
    /*IMAGES MODULE*/
    /**************/
    if ($module==”images”) {
    $keyword=$mainkwsuggest;
    $acumulaURLs=””;
    echo ”
    $_extractedImages
    “;
    if ((!$bannedProxy)&&(!empty($imagequery))){
    echo “Good proxy “;
    } elseif (!empty($imagequery)){
    if ($cacheJson) echo “$_showingCache “;
    else echo “$_badProxy “;
    }
    echo “

    “;
    echo “”;
    buttonSRightTextarea(‘txtArea’);
    echo ”
    “;
    echo “”;
    ?>


    ERROR: $_errorGD

    “;} ?>

    1. :


    2. :

    :
    :
    :
    :
    :
    :
    :
    :
    :

     .

    :

     

    :
    :
    :

     

    :



    :



    $_last100procString:

    “;
    foreach($images as $image) {
    $data = getimagesize($image);
    $width = $data[0];
    $height = $data[1];
    $file_size = filesize($image);
    $fOnlyName = pathinfo($image, PATHINFO_FILENAME);
    $ext = pathinfo($image, PATHINFO_EXTENSION);
    $file_size = $file_size / 1024; // Get file size in KB
    $file_size=round($file_size,2);
    echo “$fOnlyName.$ext”;
    echo ‘'.$image‘;
    echo “$ext “;
    echo “$width x $height”;
    echo ” $file_size KB”;
    echo “”;
    }
    echo ““;
    ?>






    Folder: /data-extractor/$fileToShowXLS
    Folder: /data-extractor/$fileToShow
    Folder: /data-extractor/*.txt
    RESET
    “;
    echo ”
    “;
    echo “”;
    buttonSRightTextarea(‘txtArea’);
    echo ”

    $_results “;
    echo “




    $_containing
    $_notContaining

    “;
    $file = ‘content-extractor-templates.txt’;
    if (isset($_POST[‘templateListUpdate’])) file_put_contents($file, $_POST[‘templateListUpdate’]);
    $text = file_get_contents($file);
    ?>



    : Template name @@@ field1 ### beginfield1 ### endfield1 @@@ field2 ### beginfield2 ### endfield2 @@@ field3 ### beginfield3 ### endfield3




    “;
    buttonSRightTextareaMini(“txtArea”);
    echo “

    “;
    if (!empty($plagichecktext)){
    $words = explode(‘ ‘, $plagichecktext);
    $numWords=count($words);
    $substringRandom=join(‘ ‘, array_slice($words, mt_rand(0, $numWords – 1), mt_rand(1, $numWords)));
    $substringRandom=trim(substrwords($substringRandom,120));
    $substringRandom=urlencode($substringRandom);
    echo ” RANDOM CHECK 1“;
    $substringRandom=join(‘ ‘, array_slice($words, mt_rand(0, $numWords – 1), mt_rand(1, $numWords)));
    $substringRandom=trim(substrwords($substringRandom,120));
    $substringRandom=urlencode($substringRandom);
    echo ” | RANDOM CHECK 2“;
    $substringRandom=join(‘ ‘, array_slice($words, mt_rand(0, $numWords – 1), mt_rand(1, $numWords)));
    $substringRandom=trim(substrwords($substringRandom,120));
    $substringRandom=urlencode($substringRandom);
    echo ” | RANDOM CHECK 3“;
    }
    echo “”;
    if ($langSelected==”es”) echo preFooter(“q-GJF0JCPQw”);
    else echo preFooter(“q-GJF0JCPQw”);
    echo “”;
    }
    /***************************/
    /*INDEXED URL CHECK MODULE*/
    /*************************/
    if ($module==”indexedcheck”) {
    if (file_exists(‘savedlinks/stop’)) {
    unlink(“savedlinks/stop”);
    }
    echo ”
    $_urlList
    “;
    echo “
    “;
    echo “$_stPauseBetweenURLs:“;
    echo “”;
    buttonSRightTextarea(‘txtArea’);
    echo ”

    $_results “;
    echo “”;
    echo “

    ($_selectPasteExcelString)
    “;
    buttonSRightTextareaMini(“txtAreaResults”);
    echo ”
    “;
    if ($langSelected==”es”) echo preFooter(“q-GJF0JCPQw”);
    else echo preFooter(“q-GJF0JCPQw”);
    echo “”;
    }
    /****************/
    /*NEW TEMPLATES*/
    /**************/
    if (!file_exists(‘savedlinks’)) {
    mkdir(‘savedlinks’, 0777, true);
    }
    if (!file_exists(‘.htaccess’)) {
    $content = ‘‘.”n”.’php_value max_file_uploads 99999′.”n”.’‘;
    $content .= “n”.’‘.”n”.’php_value max_file_uploads 99999′.”n”.’‘;
    $content .= “n”.’‘.”n”.’php_value max_file_uploads 99999′.”n”.’‘;
    file_put_contents(‘.htaccess’, $content , FILE_APPEND | LOCK_EX);
    }
    function buttonSRightTextareaMiniExt($idTextArea){
    global $_downloadAllString, $_remove, $_containing, $_notContaining;
    return ”


    $_containing
    $_notContaining

    “;
    }
    function blockTextAreaSourcesExt($idOfSearchInput, $miniCaption, $defaultContent, $readonly){
    return ”
    $miniCaption



    “;
    }
    function blockTextAreaEditableExt($idOfTextarea, $miniCaption, $defaultContent, $readonly){
    return ”
    $defaultContent
    “;
    }
    function blockTextAreaExt($idOfTextarea, $defaultContent, $readonly){
    return ”

    “;
    }
    $blockTextAreaResultsExt=”
    $_results


    ($_selectPasteExcelString)
    “.buttonSRightTextareaMiniExt(“txtAreaResults”).”
    “;
    $blockTextAreaResultsExtMini=”
    $_logTransStr


    “.buttonSRightTextareaMiniExt(“txtAreaResults”).”
    “;
    function searchSimpleButtonExt($idOfSearchInput, $placeHolder, $text, $extraCode){
    return ”

    $extraCode

    “;
    }
    $selectNumPagesExt=’‘;
    $selectGscTypeExt=’‘;
    $selectNumberSecondsExt=’‘;
    $selectNumberSecondsExtAlt=’‘;
    $selectNumberSecondsExtAlt10=’‘;
    $inputNumberSecondsExt=’‘;
    $buttonRefreshPage=”“;
    function selectLanguagesTranslator($idOfSelector,$labelText,$default){
    if ($default==”en”) return ”.$labelText.’‘;
    else return ”.$labelText.’‘;
    }
    /****************/
    /*AUTOTRANSLATE*/
    /**************/
    if ($module==”autotranslate”) {
    echo “

    $_titleBulkTranslator

    “;
    if (!file_exists(‘article-translator’)) {
    mkdir(‘article-translator’, 0777, true);
    }
    if (!file_exists(‘article-translator/output’)) {
    mkdir(‘article-translator/output’, 0777, true);
    }
    echo “

    $_subtitleBulkTranslator

    “;
    ?>


    “;
    echo selectLanguagesTranslator(“langTransSource”,”   Source: “, “en”);
    echo selectLanguagesTranslator(“langTransDestination”,”   Final: “, “es”);
    echo “”.buttonSRightTextareaMiniExt(‘txtArea’).”

    $blockTextAreaResultsExtMini”;
    ?>

    :


    ‘;
    echo “$ext “;
    echo ” $file_size KB”;
    echo “”;
    }
    echo ““;
    ?>
    REFRESH FILES
    MAX FILE UPLOADS:
    $_expDomainFinder

    $_subexpDomainFinder

    “;
    if ((!file_exists(“savedlinks/licensemail.txt”))||(!file_exists(“savedlinks/licensename.txt”))) {
    echo ”

    $_styouNeedLicense

      $_stLicenseChecks

    “;
    } else {
    if (file_exists(“savedlinks/licensemail.txt”)) $emailLicencia = trim(file_get_contents(‘savedlinks/licensemail.txt’));
    if (file_exists(“savedlinks/licensename.txt”)) $nombreLicencia = trim(file_get_contents(‘savedlinks/licensename.txt’));
    }
    if (isset($emailLicencia)) $emailValue=$emailLicencia;
    else $emailValue=””;
    if (isset($nombreLicencia)) $nombreValue=$nombreLicencia;
    else $nombreValue=””;
    echo ”
    $_stYourLicensedName:
    $_stYourLicensedEmail:
    “;
    echo ”
    $_stReloadPage

    $_stWarningExpMultiTabs

    $_seedurlList
    “;
    echo “

    1 | $_stUrlsSemilla › $_stUrlsSemillaInfo



    Max Threads:
    Depth Level:
    Max URLs/domain:

    Max URLs/level:
    “;
    echo “”;
    buttonSRightTextarea(‘expiredsources’);
    echo ”

    $_results “;
    echo “”;
    echo “”;
    echo ”
    $_pleaseIncrease1
    $_pleaseIncrease2

    2 | $_stDeadDoms › $_stDeadDomsInfo




    $_deadDomsInfo
    $_stUrlsStep
    “;
    buttonSRightTextareaMini(“txtAreaResults”);
    echo ”
    $_results
    “;
    echo ”
    “;
    echo ”

    3 | $_stAvaDoms › $_stAvaDomsInfo

    DOMAIN REGISTRATION AVAILABLE DOMAIN AUTHORITY (WAYBACK) DOMAIN AUTHORITY (MAJESTIC)

    $_downloadCSVString
    “;
    echo “”;
    if (file_exists(“savedlinks/dead-domains-whois-not-supported.txt”)) {
    echo $_stFindUseful;
    echo “dead-domains-whois-not-supported.txt “;
    }
    if (file_exists(“savedlinks/dead-domains-not-available.txt”)) {
    echo “| dead-domains-not-available.txt “;
    }
    echo ”
    LOG

    $_stExpiredWarning
    “;
    if ($langSelected==”es”) echo preFooter(“1Z_Obr52cCg”);
    else echo preFooter(“1Z_Obr52cCg”);
    echo “”;
    }
    /*****************************/
    /* DOMAIN AUTH CHECKER */
    /***************************/
    if ($module==”authchecker”) {
    echo ”
    $_urlList
    “;
    echo “

    $_stUrlsStep $_stPauseBetween:“;
    echo “”;
    buttonSRightTextarea(‘txtArea’);
    echo ”

    $_results “;
    echo “”;
    echo “”;
    echo ”

    Domain Domain authority (wayback) Domain authority (majestic) Google authority Wayback archive

    $_downloadCSVString
    LOG




    “;
    if ($langSelected==”es”) echo preFooter(“M19T4FM2ZZk”);
    else echo preFooter(“M19T4FM2ZZk”);
    echo “”;
    }
    /*************************/
    /*MULTITOOLS*/
    /***********************/
    if ($module==”multitools”) {
    ?>








    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus egestas pretium. Proin arcu odio, molestie tincidunt eleifend id, fermentum eget nisl. Donec egestas risus eu lectus porttitor aliquet et ut nibh. Aenean sed odio eu diam varius lacinia nec porta lacus. Sed a enim sit amet lorem rutrum sollicitudin in et ligula. Maecenas aliquet vehicula ipsum, quis vulputate ex vestibulum vel. Duis id quam lectus. Proin hendrerit hendrerit orci, ac rhoncus quam dignissim vitae. Quisque maximus massa eget luctus congue. Fusce sed malesuada neque, sed maximus tortor.
    Mauris leo quam, consequat ut euismod a, auctor eget tortor. Nullam odio massa, rutrum et turpis et, pretium tempus orci. Sed vel dapibus odio. Phasellus sit amet erat ac nisi accumsan finibus sed sit amet nunc. Etiam tortor quam, ultricies a elit vel, consectetur aliquam erat. In scelerisque suscipit metus, nec elementum nisi tincidunt quis. Morbi lobortis elit nec pellentesque pretium.
    Integer lacinia velit sed neque pharetra vestibulum. Morbi vitae tellus massa. Duis sit amet consectetur turpis. Nullam scelerisque turpis ac neque suscipit, nec blandit turpis sodales. Nam malesuada varius nisi, id elementum sem eleifend in. Quisque commodo convallis eleifend. Nullam quis posuere orci, ut euismod nisl. Nullam ultricies dapibus interdum. Cras ornare ligula ligula, et auctor quam malesuada nec. Aenean ullamcorper bibendum dui, sed convallis leo vulputate eu. Etiam faucibus enim a elit suscipit, in eleifend ipsum imperdiet. Cras malesuada enim nec metus aliquet, sit amet lobortis felis elementum. Sed arcu ex, tempor vitae vulputate non, feugiat id erat.
    Suspendisse potenti. Suspendisse viverra elementum odio vel fermentum. Mauris non tincidunt turpis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Morbi quis mi pharetra, mollis enim vel, fermentum tellus. Donec nisi purus, egestas sed nibh non, pharetra finibus quam. Integer mi lacus, faucibus eget imperdiet vitae, vestibulum nec sem. Morbi sagittis commodo fermentum. Aliquam et ullamcorper nibh. Donec non turpis et sapien tristique euismod eu at sem.
    Nam at nibh risus. Integer dolor erat, sollicitudin sed purus vel, vehicula sollicitudin nisl. Nunc laoreet varius neque. Nunc volutpat, urna non varius semper, lectus quam suscipit dui, a fermentum urna risus at elit. Nam iaculis lacus at ante bibendum, a vehicula dolor pharetra. Aliquam sagittis purus felis, ut finibus enim interdum ut. Praesent congue augue nec tempus consectetur. In sapien erat, interdum ac lobortis ut, interdum in est. Pellentesque tristique pretium congue.

    :

    :        



    :



    :

    :




    :



    $_last100procFilesString:

    “;
    foreach($images as $image) {
    $file_size = filesize($image);
    $fOnlyName = pathinfo($image, PATHINFO_FILENAME);
    $ext = pathinfo($image, PATHINFO_EXTENSION);
    $file_size = $file_size / 1024; // Get file size in KB
    $file_size=round($file_size,2);
    echo ” $fOnlyName.$ext”;
    echo ‘‘;
    echo “$ext “;
    echo ” $file_size KB”;
    echo “”;
    }
    echo ““;
    ?>





    :   ?module=proxygenerator”>



    Proxy file format: Proxy name @@@ https://yourdomain.com/anyfolder/phpseo-proxy.php?password=YOURPASSWORDHERE






    auto update



    .




    ×
    PHPSEO

    Download link: phpseofiles.zip

    ×
    PHPSEO

    BIENVENIDO A PHPSEO

    Los módulos de PHPSEO 2.0 se pueden pagar con AMOR ❤️

    Paga con amor suscribiéndote a YouTube, siguiéndome en Twitter o compartiendo PHPSEO.

    También te puedes suscribir a la newsletter para recibir actualizaciones y cosas chulas (soy demasiado vago para enviarte spam).


    Doy consentimiento a Netgrows para enviarme emails con actualizaciones, noticias o promociones y acepto la política de privacidad





    WELCOME TO PHPSEO

    The PHPSEO modules can be paid with LOVE ❤️

    Show me some love by subscribing to YouTube or following me in Twitter.

    You can also subscribe to the newsletter below to receive updates and cool things (I’m too lazy to spam you).


    I give my consent to Netgrows to be in touch with me via email for the purpose of news, updates and marketing. I also agree to the privacy policy






    “;
    echo $debug;
    echo “”;
    }
    /**********/
    /* Debug */
    /********/
    ?>

    “;
    }
    ?>