Today I will give you a summary of the headaches for PHP beginners. The 14 questions raised below hope to be helpful to PHP beginners.
1. Variables
get, post, and session cannot be transferred between pages. In the latest PHP version, automatic global variables are turned off, so to get the submitted variables from the previous page, use $_GET['foo'], $_POST[ 'foo'],$_SESSION['foo'] to get. Of course, you can also modify the automatic global variables to be on (php.ini is changed to register_globals = On); considering compatibility, it is better to force yourself to become familiar with the new writing method.
2. When apache2 uses the get method to pass Chinese parameters under Win32, an error will occur.
Test.php?a=Hello&b=Hello.
Passing parameters will cause an internal error
. Solution: "test.php?a=".urlencode(Hello )."&b=".urlencode (you are welcome)
...
3. The session under win32 does not work properly.
php.ini defaults to session.save_path = /tmp.
This is obviously the configuration under Linux. PHP under win32 Unable to read and write the session file, causing the session to be unusable
. Just change it to an absolute path, for example, session.save_path = c:windowstemp
4. Display error information.
When display_errors = On and error_reporting = E_ALL in php.ini, All errors and prompts will be displayed. It is best to turn it on during debugging for error correction. If you use the previous PHP writing method, most of the error messages will be about undefined variables. There will be a prompt when a variable is called before it is assigned a value. The solution is to detect or shield it.
For example, to display $foo, you can if(isset($foo)) echo $foo or echo @$foo
5. Mail() cannot send emails under Win32
. Sendmail configured under Linux can send. Under win32, you need to call the smtp server. To send emails, modify the SMTP of php.ini = ip //ip is an SMTP server without verification function (hard to find on the Internet). The best solution for sending emails in PHP is to use socket to send directly to the other party's email server instead of forwarding server.
6. If the password is not set for the initial installation of mysql, you should use
update mysql.user set password="yourpassword" where user="root"
to change the password
. 7.
The error header already sent usually occurs when you use HEADER. He may There are several reasons: 1. You PRING or ECHO before using HEADER 2. There is a blank line in front of your current file 3. You may have INCLUDEd a file and there is a blank line at the end of the file or this error will occur in the output.
8. If there is no change after changing php.ini,
restart the web server, such as IIS, Apache, etc., and then the latest settings will be applied.
9. PHP is installed on 2003 (the installation method of ISAPI is requested by experts for advice).
The php4isapi.dll of PHP4 seems to be There is some conflict with 2003, and it can only be installed in CGI mode:
Step 1, first download an installation program under www.php.net , I installed: php-4.2.3-installer.exe, you can also find the latest one version, make sure your IIS6.0 is started and accessible before installing php-4.2.3-installer.exe. After installation, go to the default website-->Application configuration;
Step 2: Click web service extension-->New web service extension;
Step 3: Extension-->php, and then add;
Step 4: Find php.exe Add the path;
Step 5: Just confirm;
Step 6: Select the PHP service extension and click Allow.
10. Sometimes the sql statement does not work.
The easiest way to debug the database operation failure is to echo the sql sentence and see if the value of the variable can be obtained.
11. The difference between include and require.
There is not much difference between the two. If the file to be included does not exist, include prompts notice, and then continues to execute the following statement. require prompts a fatal error and exits. According to my testing, they are both under the win32 platform. It is included first and then executed, so it is best not to have include or require statements in the included files, which will cause directory confusion. Maybe the situation is different in *nux. It has not been tested yet.
If a file does not want to be included multiple times, you can use include_once or require_once## to read and write document data:
function r($file_name) {
$filenum=@fopen($file_name,"r ");
@flock($filenum,LOCK_SH);
$file_data=@fread($filenum,filesize($file_name ));
@fclose($filenum);
return $file_data;
}
function w($file_name,$data,$method="w"){
$filenum=@fopen($file_name,$method );
flock($filenum,LOCK_EX);
$file_data=fwrite($filenum,$data);
fclose($filenum);
return $file_data;
}
www.devdao.com
12. The difference between isset() and empty() is
that both are used to test variables.
But isset() tests whether a variable has been assigned a value, and empty() tests whether a variable that has been assigned a value is empty. If a variable is referenced in PHP without being assigned a value, it is allowed, but there will be a notice prompt. If a variable is assigned a null value, $foo="" or $foo=0 or $foo=false, then empty($foo) returns true and isset($foo) also returns true, which means assigning a null value will not log out. a variable.
To unregister a variable, use unset($foo) or $foo=NULL.
13. The mysql query statement contains keywords.
When php queries mysql, sometimes the mysql table name or column name contains keywords. There will be errors in the query at this time. For example, if the table name is order, an error will occur during query. The simple way is to add `[above the tab key] to the table name or column name in the SQL statement to distinguish it,
such as select * from `order`.
14. There are two ways to upload multiple files at one time through the HTTP protocol
, which are two implementations of the same method. The specific procedures need to be designed by yourself:
1. Set up multiple file input boxes in the form and name them with arrays, as follows:
<form action="" method=post>
<input type=file name=usefile[]>
<input type=file name=usefile[]>
<input type=file name=usefile[]>
</form>
In this way, do the following test on the server side
echo "<pre>";
print_r($_FILES);
echo "</pre>";
2. Set multiple file input boxes in the form, but with different names, as follows:
<form action="" method=post>
<input type=file name=usefile_a>
<input type=file name=usefile_b>
<input type=file name=usefile_c>
</form>
Do the same test on the server side:
echo "<pre>";
print_r($_FILES);
echo "</pre>";