זיהוי הזחלן של גוגל - PHP - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

זיהוי הזחלן של גוגל - PHP


orninyo

Recommended Posts

הפונקציה הבאה אמורה לזהות את הזחלן של גוגל

למה היא לא עובדת?

function is_googlebot() {

if (eregi("Googlebot",$_SERVER['HTTP_USER_AGENT'])){

$ip = $_SERVER['REMOTE_ADDR'];

$name = gethostbyaddr($ip);

$host = gethostbyname($name);

if(eregi("Googlebot",$name)){

if ($host == $ip) return true;

else return false;

} else return false;

} else return false;

}

תודה.

קישור לתוכן
שתף באתרים אחרים

הפונקציה הבאה אמורה לזהות את הזחלן של גוגל

למה היא לא עובדת?

הקוד הארוך של הפונקציה...

תודה.

תראה, אני לא מבין גדול בזחלן של גוגל, וגם לא ב PHP, אבל ממה שאני מצליח להבין בקוד שלך, יש לך כמה שורות (לכאורה) מיותרות.

בגדול, יש לך תנאי מאוד פנימי שאתה רוצה לבדוק- כאשר הוא אמת - החזר אמת, בכל מקרה אחר- החזר שקר.

אתה יכול להמיר את הקוד שלך, בקוד הקצר יותר הבא:

function is_googlebot() {

if (eregi("Googlebot",$_SERVER['HTTP_USER_AGENT']) ){

$ip = $_SERVER['REMOTE_ADDR'];

$name = gethostbyaddr($ip);

$host = gethostbyname($name);

if(eregi("Googlebot",$name) && $host == $ip) return true;

} return false;

}

אין צורך ב else, אם כבר הוחזר ערך אמת, הפונקציה לא תמשיך הלאה.

אותו עיקרון לגבי שאר ה- return false, אין צורך בכ"כ הרבה כאלה.

[הערת אגב- אתה יכול להמיר את הקוד שלך לקוד אולטרה-קטן וללא משתנים כלל, אבל זה כבר מיותר לחלוטין.]

ובקשר לפעולה עצמה של הפונקציה שבנית: קראתי את התעוד של הפונקציה eregi, וגיליתי נקודה מעניינת:

Return Values

Returns the length of the matched string if a match for pattern was found in string , or FALSE if no matches were found or an error occurred.

If the optional parameter regs was not passed or the length of the matched string is 0, this function returns 1.

מה שאומר ככל הנראה, שהפונקציה תמיד תחזיר true, כי כל ה eregi מחזירות 1 - התנאי הבוליאני אמת (true), ולכן כל התנאים שלך בעצם לא מתפקדים.

אולי כדאי לך לנסות את stristr, (תיעוד: http://il2.php.net/manual/en/function.stristr.php), ולבדוק מתי היא מחזירה ערך שקר (False).

הקוד אמור לצאת בערך כזה (אם קיים אופרטור =! בPHP, כמו שכבר ציינתי אני לא בקיא מדי בשפה, אני מתכנת במקור בשפת ++C) :

function is_googlebot() {
if stristr("Googlebot",$_SERVER['HTTP_USER_AGENT']) != False ){

$ip = $_SERVER['REMOTE_ADDR'];
$name = gethostbyaddr($ip);
$host = gethostbyname($name);

if(stristr("Googlebot",$name) != False && $host == $ip) return true;

} return false;
}

לילה טוב!

קישור לתוכן
שתף באתרים אחרים

אני מניח שהבעיה היא עם הפונקציה gethostbyname שאמנם מחזירה ip אבל לאותו host יכול להיות יותר מ-ip אחד ולא בטוח שזה שחוזר זהה לזה שהתחלת איתו את התהליך. תנסה את הסקריפט הזה ותראה אם הוא עובד לך:

http://are.ehibou.com/php-script-to-detect-and-verify-googlebot

איך בכלל אתה בודק ויודע שזה לא עובד?

רק לידיעתך - על פי תקנות אסור להציג לזחלן תוכן שונה מאשר זה שמוצג למשתמש רגיל, זה יכול להביא למחיקת האתר מהאינדקס של .

קישור לתוכן
שתף באתרים אחרים

אני מניח שהבעיה היא עם הפונקציה gethostbyname שאמנם מחזירה ip אבל לאותו host יכול להיות יותר מ-ip אחד ולא בטוח שזה שחוזר זהה לזה שהתחלת איתו את התהליך. תנסה את הסקריפט הזה ותראה אם הוא עובד לך:

http://are.ehibou.com/php-script-to-detect-and-verify-googlebot

איך בכלל אתה בודק ויודע שזה לא עובד?

רק לידיעתך - על פי תקנות אסור להציג לזחלן תוכן שונה מאשר זה שמוצג למשתמש רגיל, זה יכול להביא למחיקת האתר מהאינדקס של .

אני משתמש באדסנס, ועצם זה שאני ממשיך לקבל מודעות שירות ולא מודעות אדסנס אני מסיק שהזחלן לא מצליח לקרוא את העמוד.

בנוסף לזה יש להם זחלנים סמויים שבודקים את האתר במיוחד בשביל זה...

אני לא מציג תוכן שונה, זהו עמוד לרשומים בלבד (בדיקת סשן) והגוגל בוט אינו משתמש רשום לכן כשהו מגיע לעמוד הוא מופנה לעמוד ההרשמה

האם בכל זאת זה יכול לקבל "קנס" על זה? יש דרך אחרת?

והאם הזחלן (הסמוי) בכלל יכול לקרוא PHP? הרי כל הבדיקה נעשת באיזור PHP כך שהוא לא מודע אליה

קישור לתוכן
שתף באתרים אחרים

לא ברור לי בדיוק מה אתה מנסה לעשות אבל יש לי הרגשה שיש לזה פתרונות אחרים.

- אם אתה רוצה שגוגל לא ינסה לאנדקס דפים מסויימים אז פשוט תגדיר את הדפים האלו בקובץ robots.txt.

- אם אתה רוצה שגוגל כן יצליח לאנדקס דפים שמאחורי הרשמה אז יש אפשרות להרשם בגוגל webmasters ולתת ל-googlebot שם וסיסמה שבעזרתם הוא יכנס ויאנדקס את הדפים האלה. כדאי בכל מקרה לפתוח חשבון ב-webmasters ושם תוכל לראות אם ואיזה בעיות יש לזחלן כשהוא עובר על האתר שלך.

מה זה בכלל זחלן? :bash:

זחלן (crawler) זו תוכנה שקוראת דפי , במקרה הזה לצורך הוספתם לחיפוש של .

קישור לתוכן
שתף באתרים אחרים

לא זכור שהזכרתי את המילים "לא לאנדקס", אני רוצה בדיוק ההיפך.

ולא לאנדקס , אלא לקרוא את התוכן על מנת להתאים את האדסנס לתוכן.

אני כן רוצה שהזחלן יכנס לעמוד , אך משפט התנאי בתחילת העמוד שבודק אם קיימת סשן של משתמש רשום (מה שהוא לא) מפנה אותו לעמוד אחר במקום לתת לו להכנס להמשך הקוד.

קישור לתוכן
שתף באתרים אחרים

כאמור זו לא הדרך הנכונה - זה בדיוק מה שאסור לעשות.

הדרך הנכונה - בחשבון ה-AdSense יש עמוד Site Authentication שבו אתה יכול להגדיר לזחלן ה-AdSense (שהוא נפרד מה-googlebot הכללי) דף כניסה, שם וסיסמה שבעזרתם הוא יוכל להכנס ולקרוא את הדפים המוגנים באתר שלך. כמו כן אתה תצטרך כנראה לפתוח גם חשבון google webmaster כדי לאמת שהאתר אכן שייך לך.

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...