phpmain
① php也有main方法吗
php没有谈渗指main方法哦,php和c、c++等不一样,main在c等语言是主程序入口,php并不需要,php是喊族解释型语言。我也刚含配学php的,中山学文php培训班。
② PHP变量的底层实现
我们解压PHP的源码包, 看到如下的目录
其中,
最核心的---Zend目录, 这是zend虚拟的实现. 包括栈,数据类型,编译器等,都在这实现.
最主要的main --PHP的一些内建函数,最主要函数都在这里放着.
最大的一个目录ext -- PHP的扩展.
PHP的大部分功能,都是以extenstion形式来完成的.
如果你开发了一个扩展,也放在ext目录下.
Zend对变量的表示:
答: zend实现了 zval结构体
{
value: [联合体] ,联合体的内容可能是C语言中的long,double,hashtable...
type:变量类型 , IS_NULL,IS_BOOL,IS_STRING...... IS_RESOURCE
refcount_gc
is_ref_gc
}
如:
$a = 3;
{
value : [long lval = 3]
type: IS_LONG
}
$a = 3.5
{
value: [double dval = 3.5]
type:IS_DOUBLE
疑问:
PHP中有8种数据类型,为什么zval->value 联合体中,只有5种?
答:
1: NULL,直接 zval->type = IS_NULL,就可以表示,不必设置 value的值.
2: BOOL型 , zval->type = IS_BOOL, 再设置 zval.value.lval = 1/0;
3: Resourc型 ,资源型 往往是服务器上打开的一个接口,如果 文件读取接口.
zval->type = IS_RESOURCE, zval->tyoe.lval =服务器上打开的接口的编号
发现:
PHP中,字符串类型,长度是已经缓存的,调用strlen时,系统可以直接返回其长度,不必计算.
③ PHP怎么调用其他类的方法
在Java的调用方法是import,而在PHP中没有import这个函数,一般PHP中调用其他类是用到require(),具体PHP调用其他类的方法如下:
1、首先应该先有一个文件名为tool.php的文件,在文件中声明一个类。
(3)phpmain扩展阅读:
类是变量与作用于这些变量的函数的集合。使用下面的语法定义一个类:
<?php
class Cart { var $items; // 购物车中的物品
// 将 $num 个 $artnr 物品加入购物车
function add_item($artnr, $num) {
$this->items[$artnr] += $num;
} // 将 $num 个 $artnr 物品从购物车中取出
function remove_item($artnr, $num) {
if ($this->items[$artnr] > $num) {
$this->items[$artnr] -= $num; return true;
} elseif
($this->items[$artnr] == $num) {
unset($this->items[$artnr]); return true;
} else {
return false; }
}
} ?>
上面的例子定义了一个 Cart 类,这个类由购物车中的商品构成的数组和两个用于从购物车中添加和删除商品的函数组成。
④ PHP中Fatal error: main() [<a href='function.main'>function.main</a>]: The script tried to execute a
你放入session中的应该是一个对象,而你取出这个对象之后要操作它,必须察碰链导入类定吵罩义的php文件才可以访问这个对象,否则php会调用 __autoload() 来寻找该类的定义。报错是因为找不到session中取出的类的定义,而又找不到 __autoload() 函数。
例如:
a.php
class A {
var x;
}
b.php
include a.php
$a = new A();
$a->x = '123';
session_start();
$_SESSION['a'] = $a;
c.php
include a.php //败孙必须导入A类的定义文件a.php
session_start();
$a = $_SESSION['a'];
echo $a->x; //否者此处将报出错误
⑤ php如何实现脚本异步执行的方法具体分析
php语言得用fsockopen()函数,实现脚本异步运行,代码如下
异步请求函数(用debug参数若为true则为用为调试,开启调试可以看到异步的执行情况,但是失去异步的效果)
main.php
<?php
/**
*异步请求
*@rightCopyright(c)HangzhouTechnologyCo.,Ltd.(https://www.5wx.org)
*@author$Author:juny$
*@version$Id:main.php3322018-09-2309:15:08Zjuny$
*/
functionrequest_by_fsockopen($url,$post_data=array(),$debug=false){
$url_array=parse_url($url);
$hostname=$url_array['host'];
$port=isset($url_array['port'])?$url_array['port']:80;
@$requestPath=$url_array['path']."?".$url_array['query'];
$fp=fsockopen($hostname,$port,$errno,$errstr,10);
if(!$fp){
echo"$errstr($errno)";
returnfalse;
}
$method="GET";
if(!empty($post_data)){
$method="POST";
}
$header="$method$requestPathHTTP/1.1 ";
$header.="Host:$hostname ";
if(!empty($post_data)){
$_post=strval(NULL);
foreach($post_dataas$k=>$v){
$_post[]=$k."=".urlencode($v);//必须做url转码以防模拟post提交的数据中有&符而导致post参数键值对紊乱
}
$_post=implode('&',$_post);
$header.="Content-Type:application/x-www-form-urlencoded ";//POST数据
$header.="Content-Length:".strlen($_post)." ";//POST数据的长度
$header.="Connection:Close ";//长连接关闭
$header.=$_post;//传递POST数据
}else{
$header.="Connection:Close ";//长连接关闭
}
fwrite($fp,$header);
//-----------------调试代码区间-----------------
//注如果开启下面的注释,异步将不生效可是方便调试
if($debug){
$html='';
while(!feof($fp)){
$html.=fgets($fp);
}
echo$html;
}
//-----------------调试代码区间-----------------
fclose($fp);
}
$data=array('name'=>'guoyu','pwd'=>'123456');
$url='http://localhost/test/other.php';
request_by_fsockopen($url,$data,true);//
other.php
<?php
header("content-type:text/html;charset=utf-8");
//error_reporting(0);
//ini_set('html_errors',false);
//ini_set('display_errors',false);
$name=isset($_POST['name'])?$_POST['name']:'';
$pwd=isset($_POST['pwd'])?$_POST['pwd']:'';
echo$name.$pwd;
echo'successok';
die;
?>
使用实例:
[运行的main.php主脚本文件]$data=array('name'=>'guoyu','pwd'=>'123456');
$url='http://localhost/test/other.php';
request_by_fsockopen($url,$data,true);//把应用B的用户表异步-同步数据
[导步执行文件other.php]
在other.php中便可以用$_POST接收main.php提交过来的参数,从而进行下一步操作
以上就是php如何实现脚本异步执行的方法具体分析的详细内容.
⑥ php 怎么截取二级域名
如何截取一个URL中的主域名。
<?php
$S = 'http://www1.unue.cn';
$S = parse_url($S);
$S = strtolower($S['host']) ; //取域名部分
//echo $S;
$domain = array('com','cn','name','org','net'); //域名后缀 有新的就扩展这吧
$SS = $S;
$dd = implode('|',$domain);
$SS = preg_replace('/(\.('.$dd.'))*\.('.$dd.')$/iU','',$SS); 把后面的域名后缀部分去掉
$SS = explode('.',$SS);
$SS = array_pop($SS); //取最后的主域名
$SS = substr($S,strrpos($S,$SS)); //加上后缀拼成完成的主域名
echo $SS;
?>
代码
<?
function PMA_getenv($var_name) {
if (isset($_SERVER[$var_name])) {
return $_SERVER[$var_name];
} elseif (isset($_ENV[$var_name])) {
return $_ENV[$var_name];
} elseif (getenv($var_name)) {
return getenv($var_name);
} elseif (function_exists('apache_getenv')
&& apache_getenv($var_name, true)) {
return apache_getenv($var_name, true);
}
return '';
}
if (empty($HTTP_HOST)) {
if (PMA_getenv('HTTP_HOST')) {
$HTTP_HOST = PMA_getenv('HTTP_HOST');
} else {
$HTTP_HOST = '';
}
}
echo htmlspecialchars($HTTP_HOST);
?>
⑦ 一个网站所有php文件 打开后都指向main.php 不知道为什么 我都无语了
一般使用了MVC结构的,都会把 调用文件放在一镇亩个php中,如:main.php; 为控制程序文件;
再由main.php按照不同的获取去调用不同的处理函销段数或方法!
所以这样设计是正确的;也很合御斗森理;
如果把所有的代码都写在同一支程序文件里去处理功能,这样的设计反而是不主张的!
⑧ 怎么用PHP创建目录和子目录
<?php
header("Content-type:text/html;charset=utf-8");
//设置要创建的目录(可设置多级)
$path="/";
//首先判断目录存在否
if(is_dir($path)){
echo"抱歉,目录".$path."已存在!";
}else{
//第3个参数“true”意思是能创建多级目录,iconv防止中文目录乱码
$res=mkdir(iconv("UTF-8","GBK",$path),0777,true);
if($res){
echo"$path创建成功";
}else{
echo"$path创建失败";
}
}
?>