Gb>?
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
literal 0
HcmV?d00001
diff --git a/gifs/books/susanne_wigard.jpg b/gifs/books/susanne_wigard.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..e4cdddf89e62148715518f55757b6fd28868b0bd
GIT binary patch
literal 3785
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
R2V=p*@yT9Tv>}=_@gGWJ?U?`o
literal 0
HcmV?d00001
diff --git a/include/email-validation.inc b/include/email-validation.inc
index 7f027f7b5..7c6939321 100644
--- a/include/email-validation.inc
+++ b/include/email-validation.inc
@@ -1,187 +1,26 @@
=2
- && substr($line,$length-2,2)=="\r\n")
- {
- $line=substr($line,0,$length-2);
- if($this->debug)
- $this->OutputDebug("< $line");
- return($line);
- }
- }
- }
-
- Function PutLine($connection,$line)
- {
- if($this->debug)
- $this->OutputDebug("> $line");
- return(fputs($connection,"$line\r\n"));
- }
-
- Function ValidateEmailAddress($email)
- {
- return(eregi($this->email_regular_expression,$email)!=0);
- }
-
- Function ValidateEmailHost($email,$hosts=0)
- {
- if(!$this->ValidateEmailAddress($email))
- return(0);
- $user=strtok($email,"@");
- $domain=strtok("");
- if(GetMXRR($domain,&$hosts,&$weights))
- {
- $mxhosts=array();
- for($host=0;$hostGetLine($connection)))
- {
- if(!strcmp(strtok($line," "),$code))
- return(1);
- if(strcmp(strtok($line,"-"),$code))
- return(0);
- }
- return(-1);
- }
-
- Function ValidateEmailBox($email)
- {
- if(!$this->ValidateEmailHost($email,&$hosts))
- return(0);
- if(!strcmp($localhost=$this->localhost,"")
- && !strcmp($localhost=getenv("SERVER_NAME"),"")
- && !strcmp($localhost=getenv("HOST"),""))
- $localhost="localhost";
- if(!strcmp($localuser=$this->localuser,"")
- && !strcmp($localuser=getenv("USERNAME"),"")
- && !strcmp($localuser=getenv("USER"),""))
- $localuser="root";
- for($host=0;$hostdebug)
- $this->OutputDebug("Connecting to host \"".$hosts[$host]."\"...");
- if(($connection=($this->timeout ? fsockopen($hosts[$host],25,&$errno,&$error,$this->timeout) : fsockopen($hosts[$host],25))))
- {
- if($this->debug)
- $this->OutputDebug("Connected.");
- if($this->VerifyResultLines($connection,"220")>0
- && $this->PutLine($connection,"HELO $localhost")
- && $this->VerifyResultLines($connection,"250")>0
- && $this->PutLine($connection,"MAIL FROM: <$localuser@$localhost>")
- && $this->VerifyResultLines($connection,"250")>0
- && $this->PutLine($connection,"RCPT TO: <$email>")
- && ($result=$this->VerifyResultLines($connection,"250"))>=0)
- {
- if($this->debug)
- $this->OutputDebug("This host states that the address is ".($result ? "" : "not ")."valid.");
- fclose($connection);
- if($this->debug)
- $this->OutputDebug("Disconnected.");
- return($result);
- } else { // Jesus M. Castagnetto
- if($this->debug)
- $this->OutputDebug("Unable to validate the address with this host.");
- fclose($connection);
- if($this->debug)
- $this->OutputDebug("Disconnected.");
- return false;
- }
- }
- else
- {
- if($this->debug)
- $this->OutputDebug("Failed.");
- return false; // JMC
- }
-
- }
- return(-1);
- }
-};
-
-
-// checks that is an *outside* host, and removes the
-// SPAM protection, before passing the address to the validation class
+// checks that is an *outside* host, and tries to remove anti-SPAM bits
function clean_AntiSPAM ($email) {
$remove_spam = "[-_]?(NO|I[-_]?HATE|DELETE|REMOVE)[-_]?(THIS)?(ME|SPAM)?[-_]?";
return eregi_replace($remove_spam,"",trim($email));
}
-function is_emailable_address( $email ) {
+function is_emailable_address( $email) {
$hosts_regex="lists\.php\.net|chek.*\.com";
$excluded_hosts = ereg($hosts_regex,$email);
+ $email_regex="^([-!#\$%&'*+./0-9=?A-Z^_`a-z{|}~ ])+@([-!#\$%&'*+/0-9=?A-Z^_`a-z{|}~ ]+\\.)+[a-zA-Z]{2,4}\$";
if (!$excluded_hosts && $email != "") {
- $validator = new email_validation_class;
- $validator->timeout=10;
- //$validator->debug=1;
- return $validator->ValidateEmailBox($email);
+ return eregi($email_regex, $email);
} else {
return false;
}
}
-
-// test of the validation function
-// remove this part once all changes seem to work
-/*
-$test_add = array (
- "wrong-email-address@lists.php.net","jcastagnetto@yahoo.com",
- "some-wrong@asdas.com", "jcastagnetto-NO-SPAM@yahoo.com",
- "jcastagnetto@NoSpam-yahoo.com", "jmcastagnetto@chek2.com",
- "jcastagnetto-i-hate-spam@NOSPAMyahoo.com",
- "asasasd324324@php.net", "jcastagnetto-delete-this-@yahoo.com",
- "wrong-address-with@@@@-remove_me-and-some-i-hate_SPAM-stuff");
-
-while (list(,$v) = each($test_add)) {
- echo "The address: $v (".clean_AntiSpam($v).") is";
- if (!is_emailable_address(clean_AntiSPAM($v)))
- echo " not";
- echo " valid\n";
-}
-*/
?>
diff --git a/include/shared-manual.inc b/include/shared-manual.inc
index 32ae4c1ca..deafdb2f3 100644
--- a/include/shared-manual.inc
+++ b/include/shared-manual.inc
@@ -165,7 +165,7 @@ function makeEntry($date,$name,$blurb,$id=0) {
echo clean_note($blurb);
?>
-
+
delete |
reject |
diff --git a/include/site.inc b/include/site.inc
index d87b907b3..3213716d6 100644
--- a/include/site.inc
+++ b/include/site.inc
@@ -15,19 +15,24 @@ $MIRRORS = array(
"http://at.php.net/" => array("at", "Goodie Domain Service", "gds", "http://gd.tuwien.ac.at/", 1, 0, "de"),
"http://bg.php.net/" => array("bg", "Bulgaria Online", "", "http://online.bg/", 1, 0, "en"),
"http://br.php.net/" => array("br", "SST Internet", "sst", "http://www.sst.com.br/", 1, 0, "pt_BR"),
+# "http://br2.php.net/" => array("br", "Lune Networks", "", "http://www.lunenetworks.com.br/", 1, 0, "pt_BR"),
"http://ca.php.net/" => array("ca", "easyDNS", "easydns", "http://www.easydns.com/", 1, 0, "en"),
- "http://cn.php.net/" => array("cn", "China GNU/Linux Forum", "", "http://www.linuxforum.net/", 1, 0, "cn"),
+# "http://cn.php.net/" => array("cn", "China GNU/Linux Forum", "", "http://www.linuxforum.net/", 1, 0, "cn"),
+# "http://hk.php.net/" => array("hk", "TraLand.com", "", "http://www.traland.com", 1, 0, "en"),
"http://php3.globe.de/" => array("de", "@GLOBE GmbH", "globe", "http://www.globe.de/", 1, 0, "de"),
"http://php3.de/" => array("de", "Schlund + Partner", "schlund", "http://admin.schlund.de/s+p/count.phtml?BName=logo-schlund.gif&BLocation=(www.php3.de)&url=www.schlund.de", 1, 1, "de"),
"http://dk.php.net/" => array("dk", "Børsen Online", "borsen", "http://www.borsen.dk/", 1, 0, "dk"),
"http://fi.php.net/" => array("fi", "NIC Finland", "nic", "http://www.nic.fi/", 1, 0, "fi"),
- "http://fi2.php.net/" => array("fi", "NIC Finland", "nic", "http://www.nic.fi/", 2, 0, "fi"),
+# "http://fi2.php.net/" => array("fi", "IMG-Multimedia", "", "http://www.img-media.com/", 1, 0, "fi"),
"http://fr.php.net/" => array("fr", "L'Université Michel de Montaigne Bordeaux III","montaigne", "http://www-recherche.montaigne.u-bordeaux.fr/", 1, 0, "fr"),
"http://hu.php.net/" => array("hu", "Externet", "externet", "http://www.externet.hu/", 1, 0, "hu"),
"http://php.fmal.com/" => array("it", "Open Technology Consulting", "sts", "http://otc.fmal.com/", 1, 0, "it"),
"http://it2.php.net/" => array("it", "Utility Line Italia S.r.l.", "utilina", "http://www.uli.it/", 1, 0, "it"),
+# "http://it3.php.net/" => array("it", "Italia OnLine", "", "http://www.iol.it/", 1, 0, "it"),
"http://jp.php.net/" => array("jp", "HappySize, Inc.", "happy", "http://jp.gigahit.com/", 1, 1, "jp"),
- "http://kr.php.net/" => array("kr", "HolyNet", "holynet", "http://www.holywar.net/", 1, 1, "kr"),
+# "http://jp2.php.net/" => array("jp", "Hitachi Business International, Ltd.", "http://mirrors.hbi.co.jp/", 1, 1, "jp"),
+# "http://kr.php.net/" => array("kr", "HolyNet", "holynet", "http://www.holywar.net/", 1, 1, "kr"),
+# "http://li.php.net/" => array("li", "Lie-Comtel AG", "", "http://www.lie-comtel.li", 1, 0, "de"),
"http://mx.php.net/" => array("mx", "Urbano.com.mx", "urbano", "http://web.urbano.com.mx/?in=php", 1, 0, "es"),
"http://nl.php.net/" => array("nl", "WEBtic Internet Consultancy", "webtic", "http://www.webtic.com/", 1, 0, "nl"),
"http://php.nederland.net/" => array("nl", "Nederland.net", "nederlandnet", "http://www.nederland.net/", 1, 0, "nl"),
@@ -39,13 +44,14 @@ $MIRRORS = array(
"http://pt2.php.net/" => array("pt", "SONET", "", "http://www.sonet.pt/", 1, 0, "pt"),
"ftp://ftp.utt.ro/mirrors/php3/" => array("ro", "University of Timisoara","upt", "http://www.utt.ro/", 0, 0, "ro"),
"http://ru.php.net/" => array("ru", "Direct Internet", "directnet", "http://www.dn.ru/", 1, 0, "ru"),
- "http://se.php.net/" => array("se", "Chalmers Lindholmen", "cl", "http://www.ios.chalmers.se/", 1, 1, "se"),
- "http://sg.php.net/" => array("sg", "Hwa Chong Junior College", "", "http://www.hjc.edu.sg/", 1, 0, "en"),
+ "http://se.php.net/" => array("se", "Chalmers Lindholmen", "cl", "http://www.chl.chalmers.se/", 1, 1, "se"),
+# "http://sg.php.net/" => array("sg", "Hwa Chong Junior College", "", "http://www.hjc.edu.sg/", 1, 0, "en"),
"http://ch.php.net/" => array("ch", "Laboratoire de Bases de Données", "lbd", "http://lbdwww.epfl.ch/", 1, 1, "en"),
"http://sk.php.net/" => array("sk", "Isternet SR", "isternet", "http://www.isternet.sk/", 1, 0, "sk"),
- "http://es.php.net/" => array("es", "IBD Internet", "ibd", "http://www.ibd.es/", 1, 0, "es"),
+# "http://th.php.net/" => array("th", "", "", "", 1, 0, "th"),
"http://tr.php.net/" => array("tr", "Bilkent Sunsite", "sunsite", "http://sunsite.bilkent.edu.tr/", 1, 0, "tr"),
- "http://tw.php.net/" => array("tw", "DW", "", "http://www.dw.com.tw", 1, 0, "en"),
+# "http://tr2.php.net/" => array("tr", "proGEN Internet ve Bilisim Teknolojileri", "", "http://www.progen.com.tr/", 1, 1, "tr"),
+# "http://tw.php.net/" => array("tw", "DW", "", "http://www.dw.com.tw", 1, 0, "en"),
"http://ua.php.net/" => array("ua", "PACOnet", "paco", "http://www.paco.net.ua/", 1, 0, "ua"),
"ftp://ua.php.net/" => array("ua", "PACOnet", "paco", "http://www.paco.net.ua/", 0, 0, "ua"),
"http://ua2.php.net/" => array("ua", "New Damage/Outline", "ndot", "http://www2.newdamage.com/", 1, 0, "ua"),
@@ -76,6 +82,7 @@ $COUNTRIES = array(
"es" => "Spain",
"fi" => "Finland",
"fr" => "France",
+ "hk" => "China (Hong Kong)",
"hu" => "Hungary",
"id" => "Indonesia",
"il" => "Israel",
@@ -94,6 +101,7 @@ $COUNTRIES = array(
"se" => "Sweden",
"sk" => "Slovakia",
"sg" => "Singapore",
+ "th" => "Thailand",
"tr" => "Turkey",
"tw" => "Taiwan",
"ua" => "Ukraine",
@@ -107,7 +115,7 @@ $COUNTRIES = array(
$MYSITE='http://'.getenv("SERVER_NAME").'/';
if (!isset($MIRRORS[$MYSITE])) {
- $MIRRORS[$MYSITE] = array("xx", "Unknown", "none", $MYSITE, 1, 0);
+ $MIRRORS[$MYSITE] = array("xx", "Unknown", "none", $MYSITE, 1, 0, "en");
}
# fix for non-standard port in Australian mirror
diff --git a/index.php b/index.php
index 8573573a4..bcda53832 100644
--- a/index.php
+++ b/index.php
@@ -6,10 +6,17 @@ echo "\n\n";
?>
-
-Patch Level 1 Released For PHP 4.0.4
-
-
+
Announcing PHP-GTK
+
+The first release of PHP-GTK is now available. PHP-GTK is a PHP extension that
+provides an object-oriented interface to GTK+ toolkit and enables you to write
+client-side cross-platform GUI applications. For more information, visit
+http://gtk.php.net/.
+
+ echo hdelim(); ?>
+
+Patch Level 1 released for PHP 4.0.4
+
Due to two security issues found in the Apache module version of PHP 4.0, PHP 4.0.4pl1
has been released. This bug-fix release also fixes a few party-crashing bugs that
were discovered in PHP 4.0.4.
diff --git a/links.php b/links.php
index cf398439f..b3e252e4e 100644
--- a/links.php
+++ b/links.php
@@ -10,12 +10,21 @@ Brian Schaffner has put up a PHP Employme
PHP developers can post their resumes, and employers can post their job notices.
-
-You can also try searching at Yahoo Careers for PHP-related jobs (US only for now).
-
+Other Job Sites with PHP jobs:
+
+
+For a more exhaustive list of job
+search sites on the web, take a look at dmoz.org's
+Job Search listings.
echo hdelim(); ?>
diff --git a/manual/add-note.php b/manual/add-note.php
index e6c7ad78a..e57e32811 100644
--- a/manual/add-note.php
+++ b/manual/add-note.php
@@ -18,7 +18,8 @@ CREATE TABLE note (
*/
- commonHeader("Manual Notes");
+require("shared-manual.inc");
+commonHeader("Manual Notes");
/* clean off leading and trailing whitespace */
$user = trim($user);
@@ -28,99 +29,116 @@ $note = trim($note);
on notes */
if ($user == "") {
$user = "php-general@lists.php.net";
- }
+}
if ($note == "") {
unset ($note);
- }
+}
# turn the POST data into GET data so we can do the redirect
if(!strstr($MYSITE,"www.php.net")) {
- Header("Location: http://www.php.net/manual/add-note.php?sect=".urlencode($sect)."&lang=".urlencode($lang)."&redirect=".urlencode($redirect));
+ Header("Location: http://www.php.net/manual/add-note.php?sect=".urlencode($sect)."&lang=".urlencode($lang)."&redirect=".urlencode($redirect));
+ exit;
}
- mysql_pconnect("localhost","nobody", "");
- mysql_select_db("php3");
+mysql_pconnect("localhost","nobody", "");
+mysql_select_db("php3");
- if (isset($note)):
- $now = date("Y-m-d H:i:s");
- $query = "INSERT INTO note (user, note, sect, ts, lang) VALUES ";
- # protect all HTML-like stuff (may be "Joe Blow ")
- $query .= "('" . htmlspecialchars($user) . "',";
- # only protect PHP-code start tags.
- $query .= "'" . ereg_replace("<\\?", "<?", $note) . "',";
- # or we could protect all HTML
- #$query .= "'" . htmlspecialchars(nl2br($note)) . "',";
- $query .= "'" . $sect . "',";
- $query .= "'" . $now . "',";
- $query .= "'" . $lang . "')";
- //echo "\n";
- if (mysql_query($query)):?>
+if (isset($note) && isset($action) && strtolower($action) != "preview"):
+ $now = date("Y-m-d H:i:s");
+ $query = "INSERT INTO note (user, note, sect, ts, lang) VALUES ";
+ # no need to call htmlspecialchars() -- we handle it on output
+ $query .= "('$user','$note','$sect','$now','$lang')";
+ //echo "\n";
+ if (mysql_query($query)):?>
Your submission was successful -- thanks for contributing!
- $new_id = mysql_insert_id();
- $msg = stripslashes($note);
- $msg .= "\n\n $redirect \n";
- mail("php-notes@lists.php.net","note $new_id added to $sect",$msg,"From: $user");
- else:
- // mail it.
- mail($mailto, "failed manual note query", $query);
+ $new_id = mysql_insert_id();
+ $msg = stripslashes($note);
+ $msg .= "\n\n $redirect \n";
+ mail("php-notes@lists.php.net","note $new_id added to $sect",$msg,"From: $user");
+ else:
+ // mail it.
+ mail($mailto, "failed manual note query", $query);
?>
There was an error processing your submission. It has been automatically
e-mailed to the developers.
- endif;?>
+ endif;?>
You can go back from whence you came,
or you can browse the manual with the
on-line notes.
- else:?>
-
+
+
This is what your entry will look like, roughly:
+
+ echo '';
+ makeEntry(time(),stripslashes($user),stripslashes($note));
+ echo "
";
+ else:?>
You can contribute to the PHP manual from the comfort of your browser!
-Just add your comment in the big field below (and your email address in the
-little one).
+Just add your comment in the big field below, and, optionally, your email
+address in the little one (usual anti-spam practices are OK, e.g.
+johnNOSPAM@doe.NO_SPAM.com).
-Note that HTML tags are not allowed in the posts. We tried allowing them
-in the past, but people invariably made a mess of things making the manual
-hard to read for everybody.
+
Note that most HTML tags are not allowed in the posts. We tried
+allowing them in the past, but people invariably made a mess of
+things making the manual hard to read for everybody. You can include
+<p>, </p>, and <br> tags.
-Note: If you are trying to report a bug, you're in the wrong place.
-If you are just commenting on the fact that something is not documented,
-save your breath. This is where you add to the documentation, not
-where you ask us to add the documentation. This is also not the
-correct place to ask questions. The notes
-are being edited and support questions are being deleted from them,
-so if you post a question, it will be removed. (But once you get an
-answer, feel free to come back and add it here!)
-
-Click here to go to the support pages.
-Click here to submit a bug report.
-Click here to request a feature.
+
Read carefully the following note. If your post falls into one of the
+categories mentioned there, it will be rejected by one of the editors.
-
+Note: If you are trying to report a
+bug, or request a new fature or language
+change you're in the wrong place. If you are just commenting on the fact
+that something is not documented, save your breath. This is where you
+add to the documentation, not where you ask us to add the
+documentation. This is also not the correct place to ask questions (even if you see others have done that
+before, we are editing the notes slowly but surely). If you post a note in
+any of the categories above, it will edited and/or removed.
+
+
+Just to make the point once more. The notes are being edited and support
+questions/bug reports/feature request/comments on lack of documentation, are
+being deleted from them (and you may get a rejection email), so
+if you post a question/bug/feature/complain, it will be removed. (But once you
+get an answer/bug solution/function documentation, feel free to come back
+and add it here!)
+
+Click here to go to the support pages.
+Click here to submit a bug report.
+Click here to request a feature.
+
+ endif;
+ if (!isset($sect)):?>
To add a note, you must click on the 'Add Note' button
-on the bottom of a manual page so we know where to add the note!
-
-