二级目录中使用SpeedPHP框架的问题

#1 jake

如果不是在网站根目录使用SpeedPHP框架的应用程序,而是位于某个二级目录,需要设置一下配置,否则spUrl生成的地方将不正确。

在目录内使用SP框架,也就是在非根目录中使用SP框架,需要在应用程序配置中设置:
...
$spConfig = array(
        'url' => array(
                'url_path_base' => "/您的目录/index.php",
        ),
);...
设置URL中的url_path_base值,那么spUrl以及应用程序都将按照新的访问路径进行路径转换。
下面举个例子,我们有app1,app2,admin三个目录内分别有独立的应用程序,都使用根目录下的SpeedPHP。那么目录结构如下:(点小图看大图)



上图中我们可以看到,admin程序的配置应该是:
define("SP_PATH","../SpeedPHP");
define("APP_PATH",dirname(__FILE__));
$spConfig = array(
'url' => array(
        'url_path_base' => '/admin/index.php',
),
);
require(SP_PATH."/SpeedPHP.php");
其余的app1,app2也是同理。

2009-12-24 16:41:29

#2 setlt

支持楼主

2009-12-25 23:29:39

#3 xiaoguan

太好了,正是我想要的:D,感谢楼主!

2009-12-26 19:30:41

#4 ytze

我照着做了一个,为什么不对呢?
 
define("SP_PATH","../SpeedPHP");
define("APP_PATH",dirname(__FILE__));
$spConfig = array(
'url'=>array(
     'url_path_base'=>'/web/index.php',
),
);
require(SP_PATH."/SpeedPHP.php");



DEBUG信息

---------- Debug PHP ----------
Warning: require(../SpeedPHP/SpeedPHP.php): failed to open stream: No such file or directory in F:\work\web\SpeedAMP\htdocs\web\index.php on line 9
Fatal error: require(): Failed opening required '../SpeedPHP/SpeedPHP.php' (include_path='.;C:\php5\pear') in F:\work\web\SpeedAMP\htdocs\web\index.php on line 9
输出完成 (耗时: 0 秒)
浏览器输出结果:

路由错误,请检查是否存在该函数。
  • F:\work\web\SpeedAMP\htdocs\SpeedPHP\SpeedPHP.php on line 83
78.      $GLOBALS['G_SP']["default_action"];
79.
80. $handle_controller = spClass($__controller, null, $GLOBALS['G_SP']["controller_path"].'/'.$__controller.".php");
81. // 调用控制器出错将调用路由错误处理函数
82. if(!is_object($handle_controller) || !method_exists($handle_controller, $__action)){
83.      eval($GLOBALS['G_SP']["dispatcher_error"]);

84.      exit;
85. }
86.
87. // 对路由进行自动执行相关操作
88. spLaunch("router_prefilter");

  • F:\work\web\SpeedAMP\htdocs\web\index.php on line 9
4. $spConfig = array(  
5. 'url'=>array(  
6.       'url_path_base'=>'/web/index.php',  
7.   ),  
8.   );  
9. require(SP_PATH."/SpeedPHP.php");

2009-12-31 16:08:46

#5 ytze

已解决。
把整理选为utf8_general_ci重新录入但还是提示
Warning: 1265 Data truncated for column 'tb_Name' at row 1
另咨询一个mysql问题:

我用phpmyadmin新建了一个数据表,结构如下,为什么dis_name字段不能输入中文呢?错误代码:
1.JPG
Warning: 1265 Data truncated for column 'tb_Name' at row 1
Warning: 1366 Incorrect string value: '\xE6\xB5\x8B\xE8\xAF\x95' for column 'dis_name' at row 1
查询内容时,中文变为乱码


2.JPG

2009-12-31 16:19:08

#6 jake

如果字段内已经有中文,然后改整理字符集的话,会出现这种错误的。这只是警告说原来存的是另一种格式,转换会不好。

我们一般遇到这种情况都是只能导出来,然后再导进去的

2009-12-31 16:42:08

#7 ytze

感谢 jake的帮助
但是第一个问题呢?

我把index.php的第一行
define("SP_PATH", "../SpeedPHP");
改为
define("SP_PATH", "./SpeedPHP");
或者
define("SP_PATH",dirname(__FILE__)."/SpeedPHP" );

都不行

2009-12-31 16:48:33

#8 jake

找找SpeedPHP目录在什么地方吧,或者可以到我们网站下载个最新的。然后再引用进去

2009-12-31 17:21:07

#9 小双

后台index.php可以引用前台index.php里面的数据库调用吗?我写的时候是前台后台都有一个index.php里面的代码页是一样,后台重复前台调用数据库的方法?不知道是不是这样做的

2010-03-13 11:20:01

#10 redguan

感谢 jake的帮助
但是第一个问题呢?

我把index.php的第一行
define("SP_PATH", "../SpeedPHP");
改为
def ...
ytze 发表于 2009-12-31 16:48
如果你的程序不需要移来移去,最好写成绝对形式。

 
//define("SP_PATH",dirname(__FILE__)."/SpeedPHP");
//define("APP_PATH",dirname(__FILE__));
define("APP_NAME","api"); //APP名称
define("APP_DOMAIN","xxx.com"); //DOMAIN域名
define("ROOT_PATH","d:/htdocs/"); //根路径
define("APP_DIR",APP_NAME.'.'.APP_DOMAIN); //DOMAIN域名
define("STYLE_PATH",'http://api.xxx.com/tpl/'.APP_DIR); //CSS、JS、IMG文件URL路径
define("SP_PATH",ROOT_PATH."/FrameWork"); //SP路径
define("APP_PATH",ROOT_PATH."/".APP_DIR); //APP路径
define("TPL_PATH",ROOT_PATH.'/tpl/'.APP_DIR); //模版目录
define("TMP_PATH",ROOT_PATH.'/tmp/'.APP_DIR); //编译目录
define("CACHE_PATH",ROOT_PATH.'/cache/'.APP_DIR); //缓存目录

2010-03-13 11:29:31

#11 yuanjianhua

哈哈,厉害,我正想知道怎么做呢

2010-03-17 10:26:50

#12 yuanjianhua

这里有个问题,就是后台model 和 index.php和前台的都是一样的,但是如果在二级,也需要建立一个控制器,一个model,和index。php吗?

2010-03-24 16:53:34

#13 jake

一般来是,sp提倡的重用,主要是model类的重用,也就是前后台都可以用统一的model。

前后台共用同一文件夹的model类,可以在应用程序配置中设置 'model_path'

http://speedphp.com/manual/spconfig

当然,其他的配置,可以在index.php载入同一个config.php(参见winblog),然后在各自的$spConfig['model_path'] = "model的路径",就可以了。

2010-03-24 17:17:00

#14 yuanjianhua

回复 13 jake

还是不大明白是怎么做的!

2010-03-25 09:52:06

#15 yuanjianhua

回复 14 yuanjianhua

明白了怎么做了

2010-03-25 10:44:05

#16 yangkun1

可以是可以了。不过 member/controller 下的 main.php

class main extends spController
{
      function index(){
              $this->display("default/index.html");
      }
}       

?>

调用模板不成功,模板文件是放到

2010-05-07 01:55:25

#17 jake

可以是可以了。不过 member/controller 下的 main.php



调用模板不成功,模板文件是放到 ...
yangkun1 发表于 2010-5-7 01:55
那么,有没有试过$this->display("index.html");
或者是
$this->display("member/default/index.html");
多试试吧

2010-05-07 09:19:43

#18 yangkun1

谢谢JAKE

2010-05-07 10:55:22

#19 hanyegudeng

为什么我调用模板就是不成功,也没有错误提示,就是啥都没有显示。
main中的index
$guestbook = spClass('guestbook');
                $this->results = $guestbook->findAll();
                $this->display("blue/index.html");
index.php中
'url' => array(
        'url_path_base' => '/test/index.php',
),

2011-05-18 11:19:30

#20 jake

为什么我调用模板就是不成功,也没有错误提示,就是啥都没有显示。
main中的index
$guestbook = spClass('g ...
hanyegudeng 发表于 2011-5-18 11:19
建议直接下载本站留言本例子来学习。

2011-05-18 12:31:22

#21 hanyegudeng

建议直接下载本站留言本例子来学习。
jake 发表于 2011-5-18 12:31
谢谢jake的回复。有可能是我机器配置的问题吧。我用的是mac的电脑,我把我写的那些代码放到windows下面是ok的。

2011-05-19 09:28:16

#22 dongfan

这讨论有点高深了,还在学习中

2013-12-31 21:36:01

#23 wbq-wang

二级目录 加'url_path_info'=> TRUE, <{include file="header.html"}>就不能正确显示,header.html不能正确显示

2014-10-25 17:05:25