הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   חייב פונצקציה פשוטה ב PHP! (https://hosts.co.il/forums/showthread.php?t=86994)

dor77 23-12-10 22:32

חייב פונצקציה פשוטה ב PHP!
 
שלום..
אני חייב פונקציה בPHP.
נגיד ואני נותן לו כתובת כזו:http://www.google.co.il
אני צריך שהוא יחזיר לי:google.co.il
נגיד ונתתי לו כתובת כזו:http://news.walla.co.il
אני צריך שהוא יחזיר:walla.co.il
או למקרה שהוא מקבל כזו:
http://www.youtube.com/watch?v=GfoUg...ure=grec_index
אני צריך שהוא יחזיר: youtube.com
בקיצור, אני צריך רק את הדומיין עצמו, בלי כל הדברים לפני ואחרי.
מקווה שזה אפשרי ואם לא אז משהו קרוב.
זה ממש יעזור לי, תודה!

Shay Ben Moshe 23-12-10 22:41

http://php.net/manual/en/function.parse-url.php

dor77 23-12-10 22:58

תודה..זה נראה משה נחמד אבל זה לא עושה מה שביקשתי..זה לא מפרק את הקישור כמו שאני רוצה..
הנה למשל:

PHP קוד:

<?php
$url 
'http://www.google.co.il';

print_r(parse_url($url));

echo 
parse_url($urlPHP_URL_PATH);
?>

זה מה שיוצא:
Array ( [scheme] => http [host] => www.google.co.il )

תודה רבה.

BlueNosE 23-12-10 22:59

והבעיה איפה?

תוציא כפלט את ערך התא host והכל עובד יופי.


עריכה: אתה יכול גם לשלוח כFLAG את PHP_URL_HOST. זה יעשה בשבילך אפילו את העבודה השחורה שנשארה.

dor77 23-12-10 23:03

אבל איפה בדיוק אני קובע שאני רוצה לקבל את host?
אני גם רוצה לקבל רק google.co.il
בלי www.

Hagaibl 23-12-10 23:15

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

BlueNosE 23-12-10 23:30

ציטוט:

נכתב במקור על ידי dor77 (פרסם 790355)
אבל איפה בדיוק אני קובע שאני רוצה לקבל את host?
אני גם רוצה לקבל רק google.co.il
בלי www.

אז תעיף את הwww עם str_replace/preg_replace/explode/substr או כל פונקציה אחרת שעולה לך בראש.

dor77 24-12-10 00:27

ציטוט:

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

זה מה שאני שואל, איך ניתן לעשות זאת? איפה אני כותב שאני מעוניין בהוסט?

תודה על העזרה מעריך את זה.

Ender 24-12-10 01:29

קוד:

function get_base_domain($url)
{
$url = strtolower($url);
$debug = 0;
$base_domain = '';

// generic tlds (source: http://en.wikipedia.org/wiki/Generic_top-level_domain)
$G_TLD = array(
'biz','com','edu','gov','info','int','mil','name','net','org',
'aero','asia','cat','coop','jobs','mobi','museum','pro','tel','travel',
'arpa','root',
'berlin','bzh','cym','gal','geo','kid','kids','lat','mail','nyc','post','sco','web','xxx',
'nato',
'example','invalid','localhost','test',
'bitnet','csnet','ip','local','onion','uucp',
'co' // note: not technically, but used in things like co.uk
);

// country tlds (source: http://en.wikipedia.org/wiki/Country_code_top-level_domain)
$C_TLD = array(
// active
'ac','ad','ae','af','ag','ai','al','am','an','ao','aq','ar','as','at','au','aw','ax','az',
'ba','bb','bd','be','bf','bg','bh','bi','bj','bm','bn','bo','br','bs','bt','bw','by','bz',
'ca','cc','cd','cf','cg','ch','ci','ck','cl','cm','cn','co','cr','cu','cv','cx','cy','cz',
'de','dj','dk','dm','do','dz','ec','ee','eg','er','es','et','eu','fi','fj','fk','fm','fo',
'fr','ga','gd','ge','gf','gg','gh','gi','gl','gm','gn','gp','gq','gr','gs','gt','gu','gw',
'gy','hk','hm','hn','hr','ht','hu','id','ie','il','im','in','io','iq','ir','is','it','je',
'jm','jo','jp','ke','kg','kh','ki','km','kn','kr','kw','ky','kz','la','lb','lc','li','lk',
'lr','ls','lt','lu','lv','ly','ma','mc','md','mg','mh','mk','ml','mm','mn','mo','mp','mq',
'mr','ms','mt','mu','mv','mw','mx','my','mz','na','nc','ne','nf','ng','ni','nl','no','np',
'nr','nu','nz','om','pa','pe','pf','pg','ph','pk','pl','pn','pr','ps','pt','pw','py','qa',
're','ro','ru','rw','sa','sb','sc','sd','se','sg','sh','si','sk','sl','sm','sn','sr','st',
'sv','sy','sz','tc','td','tf','tg','th','tj','tk','tl','tm','tn','to','tr','tt','tv','tw',
'tz','ua','ug','uk','us','uy','uz','va','vc','ve','vg','vi','vn','vu','wf','ws','ye','yu',
'za','zm','zw',
// inactive
'eh','kp','me','rs','um','bv','gb','pm','sj','so','yt','su','tp','bu','cs','dd','zr'
);


// get domain
if ( !$full_domain = get_url_domain($url) )
{
        return $base_domain;
}

// now the fun
if(substr($full_domain, -1) == ".")
{
        $full_domain = substr($full_domain, 0, -1);
}

// break up domain, reverse
$DOMAIN = explode('.', $full_domain);
if ( $debug ) print_r($DOMAIN);
$DOMAIN = array_reverse($DOMAIN);
if ( $debug ) print_r($DOMAIN);

// first check for ip address
if ( count($DOMAIN) == 4 && is_numeric($DOMAIN[0]) && is_numeric($DOMAIN[3]) )
{
return $full_domain;
}

// if only 2 domain parts, that must be our domain
if ( count($DOMAIN) <= 2 ) return $full_domain;

/*
finally, with 3+ domain parts: obviously D0 is tld
now, if D0 = ctld and D1 = gtld, we might have something like com.uk
so, if D0 = ctld && D1 = gtld && D2 != 'www', domain = D2.D1.D0
else if D0 = ctld && D1 = gtld && D2 == 'www', domain = D1.D0
else domain = D1.D0
these rules are simplified below
*/
if ( in_array($DOMAIN[0], $C_TLD) && in_array($DOMAIN[1], $G_TLD) && $DOMAIN[2] != 'www' )
{
$full_domain = $DOMAIN[2] . '.' . $DOMAIN[1] . '.' . $DOMAIN[0];
}
else
{
$full_domain = $DOMAIN[1] . '.' . $DOMAIN[0];;
}

// did we succeed?
return $full_domain;
}


// get domain from url
function get_url_domain($url)
{
$domain = '';

$_URL = parse_url($url);

// sanity check
if ( empty($_URL) || empty($_URL['host']) )
{
$domain = '';
}
else
{
$domain = $_URL['host'];
}

return $domain;
}


Hagaibl 24-12-10 11:28

אני רואה שאתה לא מבין בתיכנות בPHP כלל.
אז הינה הקוד הפשוט.
לא תקבל יותר מזה, אני חורג פה ממנהגי לחלוטין.
PHP קוד:

<?php
$url 
prase_url("http://www.hosts.co.il/index.php");
echo 
"The domain of this site is:" $url['host'];
?>


Itay 24-12-10 12:37

ציטוט:

נכתב במקור על ידי Hagaibl (פרסם 790387)
אני רואה שאתה לא מבין בתיכנות בPHP כלל.
אז הינה הקוד הפשוט.
לא תקבל יותר מזה, אני חורג פה ממנהגי לחלוטין.
PHP קוד:

<?php
$url 
prase_url("http://www.hosts.co.il/index.php");
echo 
"The domain of this site is:" $url['host'];
?>


מה נפלתם על הבנאדם? כולה ביקש עזרה והוא לא יודע לתכנת, אז תלמד אותו עכשיו PHP כדי שהוא יצליח לעשות את הדבר הזה?

בכל מקרה - בשביל לקבל רק את הדומיין בלי ה-www פשוט תעשה כמו שהוא אמר לך אבל עם שורה שמורידה את ה-www.
PHP קוד:

<?php
$url 
parse_url("http://www.hosts.co.il/index.php");
$url['host'] = str_replace('www.'''$url['host']);
echo 
"The domain of this site is: " $url['host'];
?>


dor77 24-12-10 15:54

חברה ממש תודה, אני ל אנתככונתי לסחוט מכמכם קוד מוכן, גם אני לא אוהב את זה.
הכל עובד יופי חוץ ממשהו שטן שידעתי שתיהיה איתו בעיה..הוא מצציג גגם סאב דומיין..
אם אני מכניס לו http://news.walla.co.il/ אז הוא מחזיר news.walla
הקטע שלא נראה לי שאפשר לעשות עם זה משהו..כי סאב דומיין זה בעיצם ה-host..אולי בכל זא יש למישהו רעיון? כי אחרת זו ממש בעיה..

Tomer 24-12-10 15:57

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

dor77 24-12-10 17:27

ציטוט:

נכתב במקור על ידי Tomer (פרסם 790414)
למה אתה צריך להוציא את הדומיין עצמו (בלי סאב-דומיינים) בכלל? מה המטרה? אולי נוכל למצוא פתרון אחר.

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

Ender 24-12-10 18:40

בן אדם,
נתתי לך בדיוק את מה שאתה צריך..
תשתמש בפונקציה get_base_domain שנתתי לך בעמוד הקודם.
קוד:

$url= "http://news.walla.co.il/page.cgi";

// זה יחזיר walla.co.il
echo get_base_domain($url);


dor77 24-12-10 18:48

ציטוט:

נכתב במקור על ידי Ender (פרסם 790443)
בן אדם,
נתתי לך בדיוק את מה שאתה צריך..
תשתמש בפונקציה get_base_domain שנתתי לך בעמוד הקודם.
קוד:

$url= "http://news.walla.co.il/page.cgi";

// זה יחזיר walla.co.il
echo get_base_domain($url);



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

עריכה:
הרגע מצאתי אותה:
http://phosphorusandlime.blogspot.co...se-domain.html

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


כל הזמנים הם GMT +2. הזמן כעת הוא 04:13.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ