speed.php问题求助

#1 jake

本帖供新版SpeedPHP框架进行问题反馈,对新版SpeedPHP有任何问题,请直接跟帖,我们会回复你的。

2015-08-10 16:29:48

#2 jake

[一个站长] 提供:

下载运行了新版speed.php 框架。发现运行提示
Notice: Undefined index: debug in D:\web\[url]www.speed.com[/url]\protected\lib\speed.php on line 476
调试后,发现配置文件config的数组加载不进来。
然后配置文件config最后一句:return $domain[$_SERVER["HTTP_HOST"]] + $config;
返回当前域名下的数组+$config数组。。提示[$domain[$_SERVER["HTTP_HOST"]] 未被定义

然后把配置文件的"localhost" => array(

修改成 $_SERVER["HTTP_HOST"]=> array(

运行成功了。。。

2015-08-11 08:22:49

#3 jake

[Cigery提供]

应用程序默认路径加了斜杠后 但是在 在speed框架文件中 引用config文件时 会多出一个斜杠  @jake

2015-08-11 08:26:15

#4 jake

jake 发表于 2015-8-11 08:22
[一个站长] 提供:

下载运行了新版speed.php 框架。发现运行提示
是这样的,config.php内的内容,$domain参数的key,是可以对应上域名,这样方便把线上配置和本地调试配置共存,而上线时不需要再修改。

比如说本地调试域名是localhost,线上域名是[url]www.speedphp.com[/url],那么:

$domain = array(
        "localhost" => array(
                'debug' => 1,
        ),
        "www.speedphp.com" => array(
                'debug' => 0,
        ),
);
这样的话,在本地调试时,就用到了"localhost"的配置,当代码传到线上时,则用到了"www.speedphp.com"的配置。

2015-08-11 08:32:06

#5 jake

jake 发表于 2015-8-11 08:26
[Cigery提供]

应用程序默认路径加了斜杠后 但是在 在speed框架文件中 引用config文件时 会多出一个斜杠  @ ...
已经修正index.php的路径应用。https://git.oschina.net/SpeedPHP/speed/commit/cd7c5cb3cdc49a4dc1a1c110b54c50112624a2e9

2015-08-11 08:33:08

#6 cigery

jake 发表于 2015-8-11 08:22
[一个站长] 提供:

下载运行了新版speed.php 框架。发现运行提示
比如你在  $domain配置中 的$key 是 localhost  浏览器中访问就需用localhost 而不能用127.0.0.1

2015-08-11 11:29:55

#7 978868928

非常支持,对于超微型项目非常适合,例如一些微信活动页之类的系统!

感谢!

2015-08-11 16:15:27

#8 cigery

在模板中使用多维数组循环   报错 Err: Parameters of 'foreach' is incorrect!  不知道问题出在哪

<{foreach $menus as $v}>

<{$v.name}>


  <{foreach $v.children as $vv}>
  

<{$vv.name}>


  <{/foreach}>
<{/foreach}>

2015-08-17 11:16:16

#9 cigery

<{foreach $v.children as $vv}>  这样的写法是错误的? 应该如何写?

2015-08-18 21:06:38

#10 jake

cigery 发表于 2015-8-17 11:16
在模板中使用多维数组循环   报错 Err: Parameters of 'foreach' is incorrect!  不知道问题出在哪

...
mark一下,刚回到,尽快会搞搞{:soso_e181:}

2015-08-22 07:49:27

#11 jake

cigery 发表于 2015-8-18 21:06
这样的写法是错误的? 应该如何写?
写法是正确的,已经修正了匹配规则,新获取的GIT上面的speed.php即可。—— 要删除tmp目录里面的文件哦。

2015-08-24 10:55:09

#12 vsxp

新版本可以用作生产环境么?另,有相关参考资料已经发消息与你私聊。

2015-08-27 17:14:08

#13 jake

vsxp 发表于 2015-8-27 17:14
新版本可以用作生产环境么?另,有相关参考资料已经发消息与你私聊。
可以,核心代码已经在生产环境跑了有三年余了

2015-08-27 17:42:31

#14 cigery

J大, 模板中的逻辑判断语句少了个 elseif

'<{elseif\s*(.+?)}>'  => '',

记得加上哦

2015-08-29 22:47:02

#15 jake

cigery 发表于 2015-8-29 22:47
J大, 模板中的逻辑判断语句少了个 elseif

''  => '',
{:soso_e117:}厄...mark先,

谢谢哦

2015-08-29 23:14:00

#16 jake

cigery 发表于 2015-8-29 22:47
J大, 模板中的逻辑判断语句少了个 elseif

''  => '',
已经修复{:soso_e181:},感谢哦

2015-08-31 09:17:15

#17 lvqing


wdcp 系统下,已经修改了 config.php 线上配置 参数,包括域名和数据库连接
访问前台页面时空白。

$GLOBALS dump 出来的数据,数据库连接参数隐藏了一下
array(3) { ["debug"]=> int(1) ["mysql"]=> array(6) { ["MYSQL_HOST"]=> string(9) "localhost" ["MYSQL_PORT"]=> string(4) "3306" ["MYSQL_USER"]=> string(8) "XXXXXXXX" ["MYSQL_DB"]=> string(8) "XXXXXXXX" ["MYSQL_PASS"]=> string(8) "XXXXXXXX" ["MYSQL_CHARSET"]=> string(4) "utf8" } ["rewrite"]=> array(4) { ["admin/index.html"]=> string(16) "admin/main/index" ["admin/_.html"]=> string(13) "admin//" ["/"]=> string(7) "/" ["/"]=> string(10) "main/index" } }

不知道还有啥没有配置好。


2015-09-01 10:53:25

#18 lvqing


speed.php 加了 var_dump 输出
但是 var_dump ($GLOBALS['debug']); 无输出,页面空白。

define('SPEED_VER', '0.1');
set_error_handler("_err_handle");
defined('DS') or define('DS', DIRECTORY_SEPARATOR);
//var_dump (APP_DIR.DS.'protected'.DS.'config.php');
$GLOBALS = require(APP_DIR.DS.'protected'.DS.'config.php');
//var_dump ($GLOBALS);

var_dump ($GLOBALS['debug']);
if($GLOBALS['debug']){
        error_reporting(-1);
        ini_set("display_errors", "On");
}else{
        error_reporting(E_ALL & ~(E_STRICT|E_NOTICE));
        ini_set("display_errors", "Off");
        ini_set("log_errors", "On");
}

2015-09-01 11:19:01

#19 jake

lvqing 发表于 2015-9-1 11:19
speed.php 加了 var_dump 输出
但是 var_dump ($GLOBALS['debug']); 无输出,页面空白。
页面空白应该是主机没设置显示错误,可以看看php的error_log里面的信息,或者是apache的错误信息。


2015-09-01 12:33:32

#20 lvqing

加了
register_shutdown_function("shutdown_func");
function shutdown_func(){}
打开显示错误后,

提示信息是

Notice: Undefined variable: debug in /www/web/onethink_szivan_com/public_html/protected/lib/speed.php on line 478

not a clean shutdown

后面的提示 是  shutdown_func 输出的

对应的 speed.php 函数 是
function err($msg){
        $traces = debug_backtrace();
        if(!$GLOBALS['debug']){
                if(!empty($GLOBALS['err_handler'])){
                        call_user_func($GLOBALS['err_handler'], $msg, $traces);
                }else{
                        error_log($msg);
                }
        }else{
                if (ob_get_contents()) ob_end_clean();
function _err_highlight_code($code){if(preg_match('/\<\?(php)?[^[:graph:]]/i', $code)){return highlight_string($code, TRUE);}else{return preg_replace('/(<\?php )+/i', "", highlight_string("
function _err_getsource($file, $line){if(!(file_exists($file) && is_file($file))) {return '';}$data = file($file);$count = count($data) - 1;$start = $line - 5;if ($start < 1) {$start = 1;}$end = $line + 5;if ($end > $count) {$end = $count + 1;}$returns = array();for($i = $start; $i <= $end; $i++) {if($i == $line){$returns[] = "
".$i.". "._err_highlight_code($data[$i - 1], TRUE)."
";}else{$returns[] = $i.". "._err_highlight_code($data[$i - 1], TRUE);>return $returns;
}

指向的语句是 if(!$GLOBALS['debug']){

这个环境超级神奇,$GLOBALS['debug'] 居然报错!

2015-09-01 13:40:25

#21 jake

配置错了,$GLOBALS取不到对应的值,所以报NOTICE

如果不会根据域名进行配置,这里有更简单的配置方法可以参考一下:

config.php文件:
return array(
        'rewrite' => array(
                'admin/index.html' => 'admin/main/index',
                'admin/_.html'    => 'admin//',
                '/
'          => '/',
                '/'                => 'main/index',
        ),
        'debug' => 1,
        'mysql' => array(

                        'MYSQL_HOST' => 'localhost',
                        'MYSQL_PORT' => '3306',
                        'MYSQL_USER' => 'root',
                        'MYSQL_DB'   => 'test',
                        'MYSQL_PASS' => '',
                        'MYSQL_CHARSET' => 'utf8',

        ),
);


2015-09-01 14:30:36

#22 lvqing

谢谢,我试试。
前面所用的域名是 本地 host 指向的,不是实际解析的域名,与这个有关么?
如果 域名 直接用 ip 地址代替,是否可以?

2015-09-01 14:46:36

#23 lvqing

config.php 直接用 j大 给的,

然后改了 speed.php
$clean = false;
function shutdown_func(){
    global $clean;
    if (!$clean){
        die("not a clean shutdown");
    }
    return false;
}
register_shutdown_function("shutdown_func");

define('SPEED_VER', '0.1');
set_error_handler("_err_handle");
defined('DS') or define('DS', DIRECTORY_SEPARATOR);
var_dump (file_exists(APP_DIR.DS.'protected'.DS.'config.php'));
$GLOBALS = require(APP_DIR.DS.'protected'.DS.'config.php');
var_dump (isset($GLOBALS['rewrite']));
var_dump (isset($GLOBALS['mysql']));
var_dump (isset($GLOBALS['debug']));

文件最后加
$clean = true;

执行结果
bool(true) bool(false) bool(false) bool(false) not a clean shutdown

配置文件存在,
$GLOBALS = require(APP_DIR.DS.'protected'.DS.'config.php');
测试 rewrite、mysql、debug 是否存在时都是 不存在,
就是 配置参数 没有进去。


2015-09-01 15:18:57

#24 jake

lvqing 发表于 2015-9-1 15:18
config.php 直接用 j大 给的,

然后改了 speed.php
哎~~~看来你改的不少东西。

或者这样吧,简单的弄个本地的xampp,然后直接用GIT的代码,就应该什么都OK的。


2015-09-01 15:43:25

#25 lvqing

改那堆是为了查问题,实际运行是不会这样改,我服了这个服务器环境,不折腾了,这个问题是特例;
其他环境试过,标准的配置文件也没问题的.

2015-09-01 16:12:30

#26 lvqing

经过多次试验最后被迫修改 config.php 和 speed.php 后,能正常运行了

config.php
$cfg = array(
  'rewrite' =>  array(
    'admin/index.html' => 'admin/main/index',
    'admin/_.html'    => 'admin//',
    '/
'          => '/',
    '/'                => 'main/index',
  ),
  'debug' => 1,
  'mysql'  =>  array(
    'MYSQL_HOST' => 'localhost',
    'MYSQL_PORT' => '3306',
    'MYSQL_USER' => 'root',
    'MYSQL_DB'   => 'spdp',
    'MYSQL_PASS' => 'root',
    'MYSQL_CHARSET' => 'utf8',
   ),
);


speed.php

$GLOBALS = require(APP_DIR.DS.'protected'.DS.'config.php');

改为
require(APP_DIR.DS.'protected'.DS.'config.php');

$GLOBALS['debug']
改为

$GLOBALS['cfg']['debug']

其他对全局量的引用类似上述修改。

但是,实在不明白为啥官方版本死活无法运行!
这种修改到核心的方法实在是太离谱了。



2015-09-08 16:21:08

#27 jake

lvqing 发表于 2015-9-8 16:21
经过多次试验最后被迫修改 config.php 和 speed.php 后,能正常运行了

config.php
别用 $cfg = array(

直接用return array(

就可以了

2015-09-08 18:21:01

#28 才周查查

温馨提醒 删除点击百照
周小姐 tel:178-757-463-87 腾讯2044494160

2015-09-09 12:55:53

#29 jeffrey_shou

支持Jake兄,加油啊,一起测试完善SP。

2015-10-07 16:13:38

#30 bencen

@jake 我觉得speedphp
$GLOBALS = require(APP_DIR.DS.'protected'.DS.'config.php');
这段,感觉最好还是不要用这个变量名。可以换个。
和本身Php全局变量同名。类,函数,想调用外部全局变量,根本就不行了。。
或者你这样做法用意何在?

2015-10-12 20:57:56

#31 jake

bencen 发表于 2015-10-12 20:57
@jake 我觉得speedphp
$GLOBALS = require(APP_DIR.DS.'protected'.DS.'config.php');
这段,感觉最好还是 ...
1. 不存在根本用不了全局变量的情况,因为$GLOBALS是个全局数组,数组的意思是谁都可以用其中一部分,但是不好用全部。

比如说mysql的配置是$GLOBALS["mysql"],如果你的程序需要,那么可以叫 $GLOBALS["mycode"],这不冲突。


2. 确实也是一个规范性的东西,一般语言不建议使用全局变量。所以SP框架是建议把全局变量作为配置,毕竟类似java之类的,也大部分只有配置是全局的。

另外,你的程序也一般不建议直接使用$GLOBALS,除非是配置。一方面是因为“语言不建议用全局变量”,另一方面也是因为“只有配置才是全局的”

2015-10-12 22:33:30

#32 citywill

作为sp老用户,偶然看到git上的动态,看到sp出新版本了,恭喜jake。

大致看了一遍代码,发现新版走更精致的路线了,而且增加了module和layout两个重要特性。喜欢。提点建议吧:

1. 新版controller和model没有重名的问题了,但model和include还是可能重名,建议引入命名空间,或者model也加后缀

2. model去掉了linker挺可惜的,这部分比较常用还不好扩展,建议加上

3. 不太明白为什么要用模板标记替代原生态然后再compile回来,这段代码是否也可以精简掉

2015-10-13 11:50:53

#33 jake

citywill 发表于 2015-10-13 11:50
作为sp老用户,偶然看到git上的动态,看到sp出新版本了,恭喜jake。

大致看了一遍代码,发现新版走更精致 ...
谢谢哦,顺便说一下:

1. 命名空间在新版好像是支持的,测试过了。不过PHP的命名空间实在是不怎么样,不怎么建议用它。PHP项目相对精简,所以SP给的建议是尽量一个项目别搞同样的名字的类,尤其是model和include本来存放的东西就不一样的。

2. linker纠结了很久,跟canphp的单骑兄也研究过此问题。实际上我们的结论是一个带join的SQL,比一堆关联定义+奇怪的用法,会更清晰,而且性能更好。SQL的join语法也不难,所以就这样咯。

3. 模板语法只有三四十行,实现了一个常规使用的smarty兼容,用这个有smarty的好处但比起smarty轻量级一百倍。当然,也可以不用,直接include PHP作为模板。代码没执行是不会有负担的,所以就让那几十行的代码在哪儿吧~~~

当然,直接用PHP做模板,我个人是不赞成的,毕竟PHP最令人诟病的地方就是PHP和HTML混合得太多。

2015-10-13 12:33:17

#34 冈刀飞絮

分页咋整?

2015-10-15 20:56:43

#35 冈刀飞絮

分页咋整?

2015-10-15 20:56:48

#36 jake

支持,而且比旧版更简单,不过教程没出之前,只能看代码,抱歉

2015-10-16 22:46:05

#37 冈刀飞絮

jake 发表于 2015-10-16 22:46
支持,而且比旧版更简单,不过教程没出之前,只能看代码,抱歉
稍微下代码我理解没错的话应该是 , 直接 findAll() 里面的 limit 参数 array() 作用controller  action里头:
$this->data = (new User())->findAll("", "", "*",array($pageIndex*($pageSize-1), $pageIndex*($pageSize) , $scope))
模板:  
数据:


确实比老的简单 灵活 好用 jake 大赞{:soso_e179:}


2015-10-16 23:24:22

#38 冈刀飞絮

冈刀飞絮 发表于 2015-10-16 23:24
稍微下代码我理解没错的话应该是 , 直接 findAll() 里面的 limit 参数 array() 作用controller  action ...
论坛似乎有bug 我们明明写了后面一节代码没了
数据:
<{foreach $data as $v}>
       
               
               
       
<{/foreach}>
<{$v.uid}><{$v.username}>

分页 <{foreach $page as $p}>
<{$p->..}>..
<{/foreach}>


2015-10-16 23:27:51

#39 冈刀飞絮

jake 申请加入 教程编写 是否能给机会?

2015-10-16 23:33:59

#40 jake

冈刀飞絮 发表于 2015-10-16 23:33
jake 申请加入 教程编写 是否能给机会?
首先,很欢迎,从另一帖子可以看到你的能力,所以肯定是欢迎的

不过,目前的基础教程方面我的想法是尽量风格统一,所以不考虑多人协作
当然,在基础教程之后,计划是继续往很多实践相关方向去写专题类教程,希望到时能有各位的协助


2015-10-18 00:27:49

#41 冈刀飞絮

jake 发表于 2015-10-18 00:27
首先,很欢迎,从另一帖子可以看到你的能力,所以肯定是欢迎的

不过,目前的基础教程方面我的想法是尽量 ...
谢谢,期待,speedphp 09年开始用,再不贡献下 用之有亏了呵呵。

2015-10-18 07:19:47

#42 passionxlife

凡是通过$this->xxx指定的模板变量,在进行调用的时候都会过滤掉html代码。看了下缓存,框架貌似在每个变量都会自动加这个echo htmlspecialchars   的函数。
有些变量不需要转义,比如友情链接、自定义底部信息(会包含hr  br   p  等标签),有什么办法可以解决这个问题么?@jake

2015-10-26 09:18:04

#43 jake

passionxlife 发表于 2015-10-26 09:18
凡是通过$this->xxx指定的模板变量,在进行调用的时候都会过滤掉html代码。看了下缓存,框架貌似在每个变量 ...
这是默认的安全策略:防止XSS攻击,所以会自动进行过滤。
如果变量不需要过滤,可以在后面加入nofilter标记,比如说 <{$myhtml nofilter}>这样就不会被转码了。


2015-10-26 09:47:26

#44 xzp44

希望J大加入在修改模板后自动编译的功能,现在每次修改模板后都要去手动删缓存。

2015-10-28 16:30:06

#45 jake

xzp44 发表于 2015-10-28 16:30
希望J大加入在修改模板后自动编译的功能,现在每次修改模板后都要去手动删缓存。 ...
请问一下是旧版还是新版,不过新旧版都没有这样的问题,除非旧版情况下开启了模板缓存。

1. 新版是自动判断模板文件修改时间,如果有更新就会重新编译。具体代码在:https://github.com/SpeedPHP/speed/blob/master/protected/lib/speed.phpL386
流程是先根据模板的filemtime(修改时间),来拼装新的编译文件的地址,然后删除原模板的编译文件,最后按新地址生成新的编译问题。

PS:filemtime在win和*nix上面都运作正常http://cn.php.net/manual/zh/function.filemtime.php,stats的缓存也是在同一次php执行中发现——但是修改文件并不是php执行行为,所以stats不会缓存。http://cn.php.net/manual/zh/function.clearstatcache.php

2. 开启APC的OPCODE缓存情况下,会需要清理OPCODE才能更新内容,但是不涉及模板,模板生成还是按修改时间。

3. 旧版的默认情况下不开缓存的,默认编译的话,也是用类似监控filemtime的方式,所以也没有这样的情况。


唯一会发生修改模板后,不马上生效的情况,只有旧版用的smarty,在开启了caching选项后,会产生这样的情况。

对于caching的说明在这里:http://www.speedphp.com/smarty/variable.caching.html

综上,新版没有用到smarty,所以可能楼上说的是旧版的情况。旧版可以关闭caching就不会有这样的问题了。


2015-10-28 17:22:45

#46 xzp44

jake 发表于 2015-10-28 17:22
请问一下是旧版还是新版,不过新旧版都没有这样的问题,除非旧版情况下开启了模板缓存。

1. 新版是自动 ...
我指的是新版,我再去研究一下。谢谢回复。

2015-10-29 10:50:57

#47 sp_lin

使用set_error_handler()后,error_reporting ()将会失效。也就是所有的错误(除上述的错误)都会交给自定义的函数处理。 是不是error_reporting这个就不需要了吧 http://www.jb51.net/article/43089.htm

2015-11-11 16:36:01

#48 jake

sp_lin 发表于 2015-11-11 16:36
使用set_error_handler()后,error_reporting ()将会失效。也就是所有的错误(除上述的错误)都会交给自定 ...
也不算是失效,error_reporting指的是页面输出错误级别,如果用了set_error_handler,那么错误就不一定是页面输出了。所以也就不属于error_reporting可以控制的范围。

http://cn.php.net/manual/zh/function.set-error-handler.php

2015-11-12 08:09:21

#49 sp_lin

jake 发表于 2015-11-12 08:09
也不算是失效,error_reporting指的是页面输出错误级别,如果用了set_error_handler,那么错误就不一定是 ...
恩 是的

2015-11-12 08:49:41

#50 lnvcliuren

新版如何分页????

2015-11-16 14:14:44

#51 passionxlife

默认demo下,如何给admin分支设置layout?
controller/admin/BaseController.php
class BaseController extends Controller{
    public $layout = "admin/layout.html";

    function init(){
        header("Content-type: text/html; charset=utf-8");
        $this->set = $GLOBALS['hb']['set']['pub']+$GLOBALS['hb']['set']['ht'];
    }
}

controller/admin/MainController.php
class MainController extends BaseController {
   // 首页
   function actionIndex(){
   }
   function actionLogin(){
      echo "login";
   }
   function actionLoged(){
      echo "loged";
   }
}

view/admin/layout.html
html>
lang="en">

    charset="utf-8">
    </font><{$set['title']}><font color="e8bf6a">
    href="<{$set['public']}>css/bootstrap.min.css" rel="stylesheet">
   
   


class="container">
    <{include file=$__template_file}>




view/admin/main_index.html
class="test">
    测试内容



最终浏览器输出的,只有“view/admin/main_index.html”的内容,何故?求解!@jake

2015-11-17 11:49:14

#52 passionxlife

默认demo下,如何给admin分支设置layout?
controller/admin/BaseController.php
class BaseController extends Controller{
    public $layout = "admin/layout.html";

    function init(){
        header("Content-type: text/html; charset=utf-8");
        $this->set = $GLOBALS['hb']['set']['pub']+$GLOBALS['hb']['set']['ht'];
    }
}

controller/admin/MainController.php
class MainController extends BaseController {
   // 首页
   function actionIndex(){
   }
   function actionLogin(){
      echo "login";
   }
   function actionLoged(){
      echo "loged";
   }
}

view/admin/layout.html
html>
lang="en">

    charset="utf-8">
    </font><{$set['title']}><font color="e8bf6a">
    href="<{$set['public']}>css/bootstrap.min.css" rel="stylesheet">
   
   


class="container">
    <{include file=$__template_file}>




view/admin/main_index.html
class="test">
    测试内容



最终浏览器输出的,只有“view/admin/main_index.html”的内容,何故?求解!@jake

2015-11-17 11:49:29

#53 passionxlife

passionxlife 发表于 2015-11-17 11:49
默认demo下,如何给admin分支设置layout?
controller/admin/BaseController.php
疏忽犯下错误,仔细检查代码,发现自己在入口文件放了一个检测客户端agent的文件,自动忽略了PC端的输出。{:soso_e136:}

2015-11-17 12:19:19

#54 新一

经过测试,新版 speed.php  在hhvm 环境中无法运行

2015-11-19 02:07:50

#55 jake

新一 发表于 2015-11-19 02:07
经过测试,新版 speed.php  在hhvm 环境中无法运行
请问,错误提示?或者是日志等,有吗?


2015-11-19 09:15:48

#56 mu3389

Fatal error: Class 'PDO' not found in C:\InstallApp\ComsenzEXP\wwwroot\speed\protected\lib\speed.php on line 314
找不到PDO这个class

2015-11-25 10:53:09

#57 jake

mu3389 发表于 2015-11-25 10:53
Fatal error: Class 'PDO' not found in C:\InstallApp\ComsenzEXP\wwwroot\speed\protected\lib\speed.php ...
你的php环境,配置一下PDO数据库类吧。php5.2开始,pdo数据库是主流了~~~

2015-11-25 11:23:25

#58 cigery

可以在自定义的错误处理函数 _err_handle中加入一行代码如下:if(0 === error_reporting()) return;
用于跳过在程序中使用了@ 抑制报错的地方

2015-12-02 13:50:12

#59 jake

cigery 发表于 2015-12-2 13:50
可以在自定义的错误处理函数 _err_handle中加入一行代码如下:if(0 === error_reporting()) return;
用于跳 ...
{:soso_e179:}

感谢提示,已经push到git上了。

2015-12-02 14:43:53

#60 anythink

建议数据库查询失败等相关异常不要用err函数,而是throw SpeedMysqlException一下,给开发者一个try的机会处理错误。

2015-12-03 16:34:36

#61 jake

anythink 发表于 2015-12-3 16:34
建议数据库查询失败等相关异常不要用err函数,而是throw SpeedMysqlException一下,给开发者一个try的机会 ...
统一收集错误,如果需要throw可以用配置 $GLOBALS['err_handler'] 设定错误处理的函数,然后在里面throw出来就好。见471行。

如果要做区分的话,最好自定义区分。框架里面做这个有点太啰嗦了。

2015-12-03 17:30:38

#62 anythink

jake 发表于 2015-12-3 17:30
统一收集错误,如果需要throw可以用配置 $GLOBALS['err_handler'] 设定错误处理的函数,然后在里面throw ...
嗯,看到自定义错误处理的函数了。

2015-12-04 13:31:47

#63 passionxlife

模板解析貌似有点BUG,模板内:


解析后浏览器呈现:


@jake

2015-12-10 00:02:03

#64 jake

passionxlife 发表于 2015-12-10 00:02
模板解析貌似有点BUG,模板内:
这个问题待解决,
暂时只要在一行里面不出现两个<{}>而中间没有点号,就不会这样解析。

2015-12-10 08:50:39

#65 jake

passionxlife 发表于 2015-12-10 00:02
模板解析貌似有点BUG,模板内:
已经修复,请从git更新代码

2015-12-10 14:29:48

#66 xieguolun

01.$domain = array(

02.        "localhost" => array(

03.                'debug' => 1,

04.        ),
则在开发时不能以127.0.0.1代替,否则出错

2015-12-26 10:59:08

#67 jake

xieguolun 发表于 2015-12-26 10:59
01.$domain = array(

02.        "localhost" => array(
你设置了localhost这个域名就用这个才行,这里是一一对应,要用127那个要自己加上。

另外普及一下,linux上面localhost很多时候不是127那个ip,还有一般域名对应的ip也不止一个的。

2015-12-26 13:27:52

#68 冈刀飞絮

public function update($conditions, $row){
                $values = array();
                foreach ($row as $k=>$v){
                        $values[":M_UPDATE_".$k] = $v;
                        $setstr[] =$k."=".":M_UPDATE_".$k;
                }
改为

public function update($conditions, $row){
                $values = array();
                foreach ($row as $k=>$v){
                        $values[":M_UPDATE_".$k] = $v;
                        $setstr[] ='`'.$k."`=".":M_UPDATE_".$k;
                }

2015-12-27 23:45:49

#69 冈刀飞絮

同上
public function create($row){
                $values = array();
                foreach($row as $k=>$v){
                        $keys[] = $k; $values[":".$k] = $v; $marks[] = ":".$k;
                }
改为
public function create($row){
                $values = array();
                foreach($row as $k=>$v){
                        $keys[] = "`{$k}`"; $values[":".$k] = $v; $marks[] = ":".$k;
                }

2015-12-27 23:52:12

#70 jake

冈刀飞絮 发表于 2015-12-27 23:52
同上
public function create($row){
                $values = array();
我疏忽了,感谢提醒,已加入

2015-12-28 09:22:05

#71 cigery

发现 模版中两个变量之间 如果有等于号"=" 会出错
例:
<{foreach $vars as $k => $v}>
<{$k}> = <{$v}>
<{/foreach}>

2016-01-08 14:52:24

#72 cigery

cigery 发表于 2016-1-8 14:52
发现 模版中两个变量之间 如果有等于号"=" 会出错
例:
$v}>
看了下模板编译后的结果
两个变量变成了这样
= <{$v; ?>

2016-01-08 14:57:53

#73 jake

cigery 发表于 2016-1-8 14:57
看了下模板编译后的结果
两个变量变成了这样
已经修复,感谢哦!

2016-01-08 15:29:03

#74 土蚕

模板判断中foreach没有foreachelse,希望能够加上。另外新框架不集成smarty的理由除了轻量化外,是否还有其他考虑?
原来模板基于smarty3写成,如果新框架想集成smarty3,请问最简洁的目录和配置信息应该放在哪里?


2016-01-11 10:04:16

#75 jake

土蚕 发表于 2016-1-11 10:04
模板判断中foreach没有foreachelse,希望能够加上。另外新框架不集成smarty的理由除了轻量化外,是否还有其 ...
foreachelse不加入的理由是:那只是一个if else,用foreachelse反而逻辑复杂了。另外的理由也是这东东实现有些繁琐。

不用smarty,有两个考虑:
1. smarty是越来越复杂,越来越重量级了。
2. 实际上我们通常开发里面,真正用到smarty的功能,不到全部smarty功能的百分之三。所以,把常用功能拿出来就好,像foreachelse,真的没几个人用,甚至很多人都不知道这东东。

新框架集成smarty的方法,可以参考旧版的controller和新版的controller对比,差不多对比一下就明白怎么集成了。

2016-01-11 10:33:55

#76 土蚕

jake 发表于 2016-1-11 10:33
foreachelse不加入的理由是:那只是一个if else,用foreachelse反而逻辑复杂了。另外的理由也是这东东实 ...
谢谢jake的回复,刚才去知乎搜索了一下smarty,的确没有当年流行了,根据现有的框架规划,是不是在保留smarty核心功能的基础上,可以通过加入php原生代码来做模板,这样提高了效率,也更为灵活,但这样做是否违背了MVC的理念?

2016-01-11 11:02:07

#77 jake

土蚕 发表于 2016-1-11 11:02
谢谢jake的回复,刚才去知乎搜索了一下smarty,的确没有当年流行了,根据现有的框架规划,是不是在保留sm ...
原生PHP作为模板,实际上就是一个include代替display,也没有所谓的支持不支持——当然封装一下“看起来”会厉害点而已。

这块应该可以作为一个新版的点。但不会包含在新版模板中,新版模板的一个关键就是跟smarty一样,在模板内限定语法(换个角度说是不灵活)。这点对于模板引擎来说非常重要。

不过我自己的意见来说,不建议用原生PHP作为模板。

开发效率并没有提升多少,

执行效率跟用smarty或新版的模板引擎,是一样的。这点不用怀疑。

而且会把程序弄得非常乱,最终变得很难维护。

php一直被人诟病就是这个,我们也不好开倒车,不是吗?

2016-01-11 11:44:19

#78 cigery

还是那个 之前修复那个模板引擎中 变量间有= 出错的问题
修复后 发现 原先模板中这样使用的变量 出现不被编译的情况:
例:
<{$position_list[$v.position_id]['name']}>

未修改=出错之前 可以正常编译显示

2016-01-12 21:07:15

#79 cigery

cigery 发表于 2016-1-12 21:07
还是那个 之前修复那个模板引擎中 变量间有= 出错的问题
修复后 发现 原先模板中这样使用的变量 出现不被编 ...
类似这样的:
<{$type_map[$v['type']]}>



<{$rating_map[$rs['rating']]}>



在页面中都变成直接显示成这样 未被PHP编译

2016-01-12 23:06:27

#80 cigery

我测试了下 之前改动的三行:'<{(\$[\S]+?)\snofilter\s*}>'          => '',
'<{(\$[\S]+?)\s*=(.*?)\s*}>'           => '',
'<{(\$[\S]+?)}>'          => '',


只需将中间一行换成:
'<{(\$[\w\_\"\'\[\]]+?)\s*=(.*?)\s*}>' => '',
其余两个还是按之前的

这样就可以了  变量间有“=”号也不会出错, 这种数组写法 $var[$v['name']] 也不会不被编译

2016-01-13 01:20:34

#81 jake

cigery 发表于 2016-1-13 01:20
我测试了下 之前改动的三行:''          => '',
''           => '',
''          => '',
已修复~~~谢谢哦

2016-01-13 10:07:35

#82 sp_lin

问下 新版什么时候发布,谢谢

2016-02-02 11:02:12

#83 sp_lin

sp_lin 发表于 2016-2-2 11:02
问下 新版什么时候发布,谢谢
同时问下 新版是否考虑过PHP7.0的兼容性 以便 跟进 PHP的性能因素

2016-02-02 11:16:02

#84 jake

sp_lin 发表于 2016-2-2 11:16
同时问下 新版是否考虑过PHP7.0的兼容性 以便 跟进 PHP的性能因素
新版已在github上发布,请下载使用。

新版和旧版都完美支持PHP7。

2016-02-02 16:24:02

#85 胆小鬼/aiq

如果我的站点有对应的虚拟目录,这个应该怎么处理?
目前我把speedphp放在虚拟目录下,默认首页打开无样式?

2016-02-04 12:05:46

#86 jake

胆小鬼/aiq 发表于 2016-2-4 12:05
如果我的站点有对应的虚拟目录,这个应该怎么处理?
目前我把speedphp放在虚拟目录下,默认首页打开无样式? ...
可以放在虚拟目录的根目录,也可以放在相对目录。

无样式的问题,是CSS路径问题。请设置你的CSS文件路径为相对或绝对路径即可。具体可以百度一下。

2016-02-04 22:21:43

#87 dongfan

请问一下,用什么方法,可以获取当前的路径,我现在模板,不知当前的路径该怎么配置?
在view文件中,我分两个文件夹,一个是web前台模板, 一个是admin后台模板,不知如何配置这两个目录的模板,麻烦指教一下?

2016-02-26 08:24:56

#88 jake

dongfan 发表于 2016-2-26 08:24
请问一下,用什么方法,可以获取当前的路径,我现在模板,不知当前的路径该怎么配置?
在view文件中,我分 ...
当前路径?我大概猜有两个意思

1. 当前访问的位置,比如说在首页。这个你可以

global $__controller, $__action;

就可以用这两个变量了,分别代表了当前的控制器和action。

2. 文件当前路径,文件执行路径是 APP_DIR 这个常量,

当前文件路径是常量:__FILE__

3. view里面的目录,可以这样子

$this->display("admin/index.html")
或者
$this->display("web/index.html")

不是通过配置,而是通过程序来定模板位置。

2016-02-26 08:42:21

#89 dongfan

jake 发表于 2016-2-26 08:42
当前路径?我大概猜有两个意思

1. 当前访问的位置,比如说在首页。这个你可以
谢谢回复,我可能没有表述清楚,我其实想知道,一是前后台的中的web 和admin文件夹中的html文件中的那些个css ,img等文件他的路径如何写,让html正常显示出来?

2016-02-26 22:34:03

#90 jake

dongfan 发表于 2016-2-26 22:34
谢谢回复,我可能没有表述清楚,我其实想知道,一是前后台的中的web 和admin文件夹中的html文件中的那些 ...
可以百度一下相对路径和绝对路径,稍微了解一下网页知识。

另外,也可以参考我们手册的文章http://www.speedphp.com/thread-3748-1-1.html,路径这样的知识是通用的。

2016-02-27 14:45:57

#91 JiaFeiX

请问可以支持 Sqlite 数据库吗?    可以直接把 SpeedPHP 的Sqlite驱动拿过来吗?

2016-02-28 23:31:39

#92 jake

JiaFeiX 发表于 2016-2-28 23:31
请问可以支持 Sqlite 数据库吗?    可以直接把 SpeedPHP 的Sqlite驱动拿过来吗?
驱动拿过来不能直接用,当然如果是修改,直接改model类会更简单。理论上来说sqlite只是链接方式不一样,所以改起来很容易。

2016-02-29 22:07:06

#93 505783958

什么时候出个详细的使用文档,现在都是摸瞎在用,因为自己是做手机端的, php不是很熟悉,如果有详细文档会好用很多。

2016-03-10 11:37:44

#94 jake

505783958 发表于 2016-3-10 11:37
什么时候出个详细的使用文档,现在都是摸瞎在用,因为自己是做手机端的, php不是很熟悉,如果有详细文档会 ...
在写

2016-03-10 12:26:47

#95 iwang110

Fatal error: Call to undefined function arg() in E:\WWW\protected\controller\MainController.php on line 8

这句话,没定义arg()   我在测试留言板,这个是什么意思  jack!
function actionWrite(){
        dump(arg());
    }
dump(arg());用不了吗?

2016-04-09 16:06:16

#96 jake

iwang110 发表于 2016-4-9 16:06
Fatal error: Call to undefined function arg() in E:\WWW\protected\controller\MainController.php on l ...
下载最新的,arg是后面加入的

2016-04-11 14:53:42

#97 gonten

新版不能设置数据库前缀了么?框架文件里面也没有找到数据库前缀的相关代码

2016-04-30 23:27:24

#98 jake

gonten 发表于 2016-4-30 23:27
新版不能设置数据库前缀了么?框架文件里面也没有找到数据库前缀的相关代码 ...
不用设置,没有必要。

大部分开发情况下实际上每个应用是对应一个库的。

2016-05-01 00:26:35

#99 gonten

jake 发表于 2016-5-1 00:26
不用设置,没有必要。

大部分开发情况下实际上每个应用是对应一个库的。
我自己用的话就不要设置,但是开发的程序是开源给别人用的话,最好还是照顾下一个数据库多站点的用户。如果加上麻烦么?

2016-05-01 17:14:38

#100 jake

gonten 发表于 2016-5-1 17:14
我自己用的话就不要设置,但是开发的程序是开源给别人用的话,最好还是照顾下一个数据库多站点的用户。如 ...
应该不麻烦,你看看什么地方有表名的都加上,不就行了吗?


2016-05-01 20:02:08

#101 luchec

Err: Directory "/Users/LuchecChen/Project/php/framework/speed-master/protected/tmp" is not writable or readable我放到工程里直接就是这样的提交,啥回事?

2016-05-06 09:56:28

#102 jake

luchec 发表于 2016-5-6 09:56
Err: Directory "/Users/LuchecChen/Project/php/framework/speed-master/protected/tmp" is not writable  ...
protected/tmp 目录要设置成可写可读。

2016-05-06 10:49:35

#103 cigery

Model层的findCount()方法,最后的返回值不用加判断,直接 return $count[0]['M_COUNTER'] 既可。

2016-05-16 23:00:30

#104 jake

cigery 发表于 2016-5-16 23:00
Model层的findCount()方法,最后的返回值不用加判断,直接 return $count[0]['M_COUNTER'] 既可。
...
PHP5.3以上有个严格模式,未确定有没有存在的变量是不能直接用的。所以要做一次判断。

这里也是为了“兼容”5.3才写的多余代码。

2016-05-17 08:38:56

#105 cigery

jake 发表于 2016-5-17 08:38
PHP5.3以上有个严格模式,未确定有没有存在的变量是不能直接用的。所以要做一次判断。

这里也是为了“兼 ...
不是噢,这和严不严格模式没有关系,是SELECT COUNT(*) 无论查不查得到数据PDO都会返回一个二维数组,所以无需判断

2016-05-17 09:22:01

#106 jake

cigery 发表于 2016-5-17 09:22
不是噢,这和严不严格模式没有关系,是SELECT COUNT(*) 无论查不查得到数据PDO都会返回一个二维数组,所 ...
这只是PDO库的行为,但是“未确定存在的变量不能直接使用”,这是PHP5.3+的严格模式的规定。

不管主观上认为变量必定存在,PHP语法都是按规定来,不能改变。

我也知道这种明明知道存在还要检测的做法挺多余的,但是有什么办法,如果在5.3+出现个notice,又会被诟病成不支持xx了。

2016-05-17 09:48:23

#107 cigery

jake 发表于 2016-5-17 09:48
这只是PDO库的行为,但是“未确定存在的变量不能直接使用”,这是PHP5.3+的严格模式的规定。

不管主观上 ...
我在5.6环境下,开启严格检查,没有出现过notice,J大如果这里坚持要加判断的话,那么findAll()方法里的这行 $limit = $this->pager($limit[0], $limit[1], $limit[2], $total[0]['M_COUNTER']); 第4个参数也得判断噢

2016-05-17 09:56:12

#108 jake

cigery 发表于 2016-5-17 09:56
我在5.6环境下,开启严格检查,没有出现过notice,J大如果这里坚持要加判断的话,那么findAll()方法里的 ...
是的,必须坚持要兼容5.3+。
findAll方法里面那个确实考虑不全,补上了,git已经提交。

2016-05-17 10:51:43

#109 lvqing

j大, 有一点小小的建议

1. 更新缓存文件时,  在 speed.php 的 函数
public function compile($tempalte_name)
里面,  file_put_contents 后能否判断下缓存文件是否真的生成了,如果没有生成,报一下错

                $this->_clear_compliedfile($tempalte_name);
                file_put_contents($complied_file, $template_data);
               
                return $complied_file;

改成:
                $this->_clear_compliedfile($tempalte_name);
                file_put_contents($complied_file, $template_data);
               
                if(!file_exists($complied_file)) err('Err: "'.$complied_file.'" is not exists!');
                return $complied_file;


算是防呆,  如果 tmp 目录权限不足的话,直接有错误信息


2. 自动加载部分, 在 speed.php 的 函数
function inner_autoload($class) 中
                foreach(glob(APP_DIR.DS.'protected'.DS.$dir.DS.'*.php') as $file){
                        if(strtolower($file) === $lowerfile){
                                include $file;
                                return;
                        }
                }

如果文件名数组为空, 这里会报错,
在某些环境下, 比如 wdcp 一键包, 测试结果是没有缓存文件产生, 页面直接 500 错
建议修改下



    $arrFiles = glob(APP_DIR.DS.'protected'.DS.$dir.DS.'*.php');
    if ($arrFiles) {
      foreach($arrFiles as $file){
        if(strtolower($file) === $lowerfile){
          include $file;
          return;
        }
      }
    }






2016-05-26 13:59:04

#110 jake

lvqing 发表于 2016-5-26 13:59
j大, 有一点小小的建议

1. 更新缓存文件时,  在 speed.php 的 函数
1. 目录检查的话,在file_put_contents前面的376行,已经进行过检查,重复的检查是没必要的,
                if(!is_writable($this->compile_dir) || !is_readable($this->compile_dir)) err('Err: Directory "'.$this->compile_dir.'" is not writable or readable');

考虑是用你的意见,不对目录判断,而对生成文件进行判断。

另外这里需要考虑高并发下面写入不及时的问题,做一些类似的改动!


2. 这个问题已经注意到了,原先的代码是参考了PHP官网对glob函数的例子,http://cn.php.net/manual/zh/function.glob.php

如同你说的,多加个判断会更健壮点,稍候会改上。

感谢支持哦!!!这两个问题都很有帮助的,尤其是前面的。






2016-05-26 14:14:46

#111 jake

lvqing 发表于 2016-5-26 13:59
j大, 有一点小小的建议

1. 更新缓存文件时,  在 speed.php 的 函数
已经修正 https://github.com/SpeedPHP/speed/commits/master

感谢!

2016-05-26 15:02:27

#112 lvqing

谢谢 j大!  已经下载最新版本 j大还特地提到我, 有点惶恐了, 只是一点小事, 非常感谢

2016-05-27 10:44:05

#113 xcj

刚接触sp 为什么在本地测试$this->display("guestbook.html")有效
而在项目上$this->display("guestbook.html")页面不会输出 而echo是有的
麻烦问下 这是什么原因  

2016-05-30 13:57:28

#114 jake

xcj 发表于 2016-5-30 13:57
刚接触sp 为什么在本地测试$this->display("guestbook.html")有效
而在项目上$this->display("guestbook.ht ...
页面输出是空白还是什么的,一般部署到服务器上空白,主要应该是因为出现500错误。

出错的原因有很多,tmp目录不能写入,这是对模板是最前提要求。

另外还有是模板本身语法不对,文件路径不对等等,因为linux是区分大小写的。

如果找不到原因,最好首先是通过最简单的例子输出,然后再慢慢加入其他的东西。

2016-05-30 14:04:49

#115 xcj

jake 发表于 2016-5-30 14:04
页面输出是空白还是什么的,一般部署到服务器上空白,主要应该是因为出现500错误。

出错的原因有很多,tm ...
jake大大   按教程弄的  发表留言后跳转说找不到链接

2016-05-31 10:01:45

#116 jake

xcj 发表于 2016-5-31 10:01
jake大大   按教程弄的  发表留言后跳转说找不到链接
出现404,一般是因为服务器没有配置好rerwite,按这里的教程先配置好https://github.com/SpeedPHP/manual/blob/master/%E8%AE%BF%E9%97%AE%E4%BA%A4%E4%BA%92-%E4%BC%AA%E9%9D%99%E6%80%81%E5%8F%8AURL%E8%B7%B3%E8%BD%AC.md

2016-05-31 10:09:42

#117 xcj

按手册设置了404

localhost/admin/ad.html
这个链接会跳转404页面

localhost/admin/ad
localhost/ad.html
而这两个都不会跳转  只会原页面刷新 链接还是输入的链接

是还需要在哪里设置什么吗?

2016-06-02 10:26:20

#118 jake

xcj 发表于 2016-6-2 10:26
按手册设置了404

localhost/admin/ad.html
404的意思是没有对应的控制器/动作,才会触发的。

如果有对应得上的就不会,所以需要看看你的路由配置。

2016-06-02 11:46:44

#119 呀哈哈

新人刚接触用框架搭建页面
在BaseController.php用了layout.html这个页面把网页的头部和底部放在里面
头部有nav 比如 首页 阅读 交流 关于我们  
如果我想要实现选中当前页添加class
不用框架的话直接在php页面定义
然后在头部判断$this等于几
在框架里按照那样试了不行 现在应该怎么做

2016-06-03 09:53:10

#120 jake

呀哈哈 发表于 2016-6-3 09:53
新人刚接触用框架搭建页面
在BaseController.php用了layout.html这个页面把网页的头部和底部放在里面
头部 ...
1. $this是一个比较特殊的关键字,别用。
2. 新人,还是好好看看新版的入门教程,有介绍怎么传递模板参数的。



2016-06-03 10:03:49

#121 呀哈哈

jake 发表于 2016-6-3 10:03
1. $this是一个比较特殊的关键字,别用。
2. 新人,还是好好看看新版的入门教程,有介绍怎么传递模板参数 ...
嗯  当时看的时候没注意看到这个  谢谢

2016-06-03 10:31:22

#122 呀哈哈


J大 这段代码里这部分该怎么写:dizzy:

2016-06-05 00:28:49

#123 jake

呀哈哈 发表于 2016-6-5 00:28
J大 这段代码里这部分该怎么写
用if else吧,如果三元运算符难懂的话

2016-06-06 13:22:33

#124 呀哈哈

$this->disc = $discuss->findall(null,null,"releasetime desc","9");

教程里说$limit和$sort结合使用这样写
但是这段代码输出不了 页面空白
直接findall()是可以输出的

2016-06-06 15:48:22

#125 jake

呀哈哈 发表于 2016-6-6 15:48
教程里说$limit和$sort结合使用这样写
但是这段代码输出不了 页面空白
直接findall()是可以输出的
空白一般有报错,请检查服务器日志看看错误信息

另外注意一下,是findAll,教程里是区分大小写的

2016-06-07 07:06:03

#126 qq171223374

伪静态 求指教
今天遇到问题,
配置文件这样的 config:'mall/main-list---.html'=> 'mall/main/list'
html : <{url c='mall/main' a='list' catid='2'}>
生成: http://www.xx.com/mall/main-list--2-.html
可是访问却跳转到首页, 然后我把 伪静态匹配的正则改了 (?\w+) 改为 (?\w*) , 能正常访问这个action。
想问下后续会不会有什么bug
还有,有没有方法能做到
<{url c='mall/main' a='list' catid='2'}>生成
http://www.xx.com/mall/main-list--2.html  不要后面空的参数

2016-06-07 11:43:15

#127 cigery

qq171223374 发表于 2016-6-7 11:43
伪静态 求指教
今天遇到问题,
配置文件这样的 config:'mall/main-list---.html'=> 'mall/main/list'
去掉空值很简单噢
$urlArray[$url] = preg_replace('/<\w+>/', '', $urlArray[$url]).(!empty($_args) ? '?'.http_build_query(array_filter($_args)) : '');



这样就去掉了

2016-06-07 14:58:14

#128 阿诺

载入sp框架 spConfig.php 配置文件时,提示未定义的变量 Q)PD_8))QTUT[A1KQ[_IOR1.jpg

2016-06-07 15:24:23

#129 jake

阿诺 发表于 2016-6-7 15:24
载入sp框架 spConfig.php 配置文件时,提示未定义的变量
要区分一下新版和旧版,看看手册

2016-06-08 17:25:36

#130 k4917552

curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_);  
curl_setopt($ch, CURLOPT_REFERER,_REFERER_);  

_USERAGENT_
_REFERER_
出现错误

谷歌API
contentDetails->upload->videoId
无法运行 ->upload

2016-06-08 21:28:18

#131 jake

k4917552 发表于 2016-6-8 21:28
curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_);  
curl_setopt($ch, CURLOPT_REFERER,_REFERER_);  
这个跟框架没关系吧,你的问题是有两个未定义或者没定义好的变量。
另外可以wget试试api能否通。

2016-06-10 07:10:48

#132 呀哈哈

$this->kw=arg('kw');
if($this->kw){
    $this->rows = $db -> findAll(["iid like :word", ":word" => "%".$this->kw."%"]);
}else{
    $this->rows = $db->findAll(null,"st desc, rank asc, postdt desc","*",array($page,15,8));
$this->pager = $db->page;
}



  •                

                           
                            
                   

             

  • 想实现模糊查询 查询出来后 把kw的值传到url上 使url后缀带有&kw=4404
    现在这样写哪里错了?  

    2016-06-15 11:21:55

    #133 jake

    呀哈哈 发表于 2016-6-15 11:21
    想实现模糊查询 查询出来后 把kw的值传到url上 使url后缀带有&kw=4404
    现在这样写哪里错了?   ...
    URL的写法麻烦参考手册 https://github.com/SpeedPHP/manual/blob/master/%E8%AE%BF%E9%97%AE%E4%BA%A4%E4%BA%92-%E4%BC%AA%E9%9D%99%E6%80%81%E5%8F%8AURL%E8%B7%B3%E8%BD%AC.md

    2016-06-15 11:25:00

    #134 cigery


    一些浏览器会自动encode, 造成url函数中一些参数无法正确在浏览器显示,比如url中使用了一些JS变量或者JS模板引擎变量:
    haha

    可以在框架第93行代码 :
    $params = empty($param) ? '' : '&'.http_build_query($param);
    加入一个urldecode:

    $params = empty($param) ? '' : '&'.urldecode(http_build_query($param));
    以便能够在所有浏览器正确输出参数

    2016-06-19 21:10:19

    #135 jake

    cigery 发表于 2016-6-19 21:10
    一些浏览器会自动encode, 造成url函数中一些参数无法正确在浏览器显示,比如url中使用了一些JS变量或者JS ...
    mark,我研究研究哦。好像没怎么见过这情况,什么浏览器会比较突出?

    2016-06-20 11:01:10

    #136 cigery

    jake 发表于 2016-6-20 11:01
    mark,我研究研究哦。好像没怎么见过这情况,什么浏览器会比较突出?
    搞错了 不是浏览器原因,查了下PHP官方的具体解释 http_build_query 函数,是根据数组产生一个urlencode之后的请求字符串.是http_build_query 自带encode

    2016-06-20 11:51:27

    #137 耶有宝

    来提个问题,jake帮忙看下

            function actionLogin(){
                    $condition = array("username" => arg("username"),"password"=>arg("password"));
                    $users = new Model("users");
                    $result = $users->find($condition);
                    echo $result['username'];
            }
    用户名密码都是对的,结果username出不来,sp给出的错误也没有标题
    speed.php on line 334
    speed.php on line 307
    speed.php on line 298
    speed.php on line 218
    speed.php on line 222
    ViewController.php on line 6 = $result = $users->find($condition);

    sql语句最终为:
    SELECT * FROM jifen_user WHERE `old_username` = :old_username AND `user_mima` = :user_mima LIMIT 1

    2016-06-20 23:18:11

    #138 耶有宝

    不好意思,原来是数据库连接没改过来

    2016-06-20 23:29:39

    #139 呀哈哈

    第一张图是直接php页面写没用框架可以正常输出
    第二张图是用新版sp写的 输出后说签名的算法错了
            
    //签名函数
    function createSign ($paramArr) {
         global $appSecret;
         $sign = $appSecret;
         ksort($paramArr);
         foreach ($paramArr as $key => $val) {
             if ($key != '' && $val != '') {
                 $sign .= $key.$val;
             }
         }
         $sign.=$appSecret;
         $sign = strtoupper(md5($sign));
         return $sign;
    }
    //组参函数
    function createStrParam ($paramArr) {
         $strParam = '';
         foreach ($paramArr as $key => $val) {
         if ($key != '' && $val != '') {
                 $strParam .= $key.'='.urlencode($val).'&';
             }
         }
         return $strParam;
    }

    这两个函数 写在include里 并放入init()里了 测试过可以用这两个函数

    第三张图是写在控制器上的代码 问题应该出在这 这段代码是直接从php文件里拿来的  麻烦帮忙看下这段代码是不是有什么地方在控制器里的写法有错
    测试了一天没看出问题出在哪

    2016-06-22 17:06:02

    #140 jake

    你输出那个$url看看是不是一样的不就得了吗?

    2016-06-22 17:10:47

    #141 呀哈哈

    jake 发表于 2016-6-22 17:10
    你输出那个$url看看是不是一样的不就得了吗?
    php页面和sp都输出了$url 两个页面输出的是一模一样链接问题出在 file_get_contents()这个php函数?

    2016-06-22 17:24:40

    #142 jake

    呀哈哈 发表于 2016-6-22 17:24
    php页面和sp都输出了$url 两个页面输出的是一模一样链接问题出在 file_get_contents()这个php函数?
    ...
    php函数都一样的吧。

    你看看淘宝文档这个返回的具体说明,是不是他们接收方需要判断来源地址或者来源IP什么的,要完全做得一模一样才行。

    2016-06-22 18:01:23

    #143 呀哈哈

    HTML页面


          <{if $rows}>
          <{foreach $rows as $v}>
         

    •         

      标题:<{$v.title}>


              

      链接:<{$v.link}>


              

      优惠券:<{$v.couponlink}>


              

      剩余数量:<{$nums}>


         

    •     <{/foreach}>
          <{/if}>

    控制器方法

    class MainController extends BaseController {
            function actionPro(){
                    $page=(int)arg("p",1);
                    $db = new Model('pro');
                    $this->rows = $db->findAll(null,"rank asc","*",array($page,88,8));
                    foreach( $this->rows as $k => $v){  
                $htmlstr = get_html(iconv('UTF-8', 'gb2312', $v['couponlink']));
                $start = strpos($htmlstr, "");
                $ends = strpos($htmlstr, "
    ", $start);
                $this->nums = substr($htmlstr,$start, $ends-$start);
                    }  
                    $this->pager = $db->page;
                    $this->display("index.html");
            }
    }

    想要实现

    2016-06-24 16:32:26

    #144 呀哈哈

    还没写完就自动发出了

    想要实现 HTML页面上这个<{$nums}>也根据$rows一起遍历

    在控制器里应该怎么写 我现在这样写<{$nums}>输出的都是同一个

    2016-06-24 16:34:57

    #145 jake

    php数组的基础语法最好能花点时间看看。你现在的处理是nums是字符串了,要用数组。

    大概改成这样,具体可以参考php的语法数组部分

    class MainController extends BaseController {
            function actionPro(){
                    ...
                    $nums = array();
                    foreach( $this->rows as $k => $v){  
                                ...
                                $nums[] = substr($htmlstr,$start, $ends-$start);
                    }  
                    $this->nums = $nums;
                    ...
                    $this->display("index.html");
            }
    }

    2016-06-26 08:51:05

    #146 想做一个懒人

    findAll绑定参数的方法查询不出结果,
    一、数据查找 findAll()

    用法:findAll($conditions = array(), $sort = null, $fields = '*', $limit = null)

    参数:

    $condition,数组形式,查找纪录的条件。有两种方式:

    直接键对值的等于关系的AND条件,如array("cid"=>12, "score"=>100),那么指代的查询是“ WHERE cid = 12 AND score = 100 ”。
    另一种是可以表示比等于和AND更为复杂的条件数组。该数组的[0]下标项,是查询的字符串条件,但是输入参数必须是绑定形式的;数组的其他键对值项,都是绑定的参数字段对应值。

    这种类型比较难理解,比如说我们需要模糊查找文章title带有“php”的文章,条件是: “WHERE title like '%php%' ”。那么$condition可以设置成

    findAll(
        array("title like '%:word%'",
            ":word" => 'php'
        )
    );
    代码:
    $m_loginlog=new m_loginlog;
                    $ret=$m_loginlog->findAll(array("loginip like '%:ip%'",":ip" => '223'));
            dump($ret);
            $ret=$m_loginlog->findAll(array("loginip like '%223%'",":ip" => '223'));
            dump($ret);


    执行结果:
    Array
    (
    )
    Array
    (
        [0] => Array
            (
                [id] => 640
                [username] => xingyt
                [usertype] => AGENT
                [logintime] => 2016-08-11 12:50:29
                [loginip] => 223.104.38.93
                [loginaddr] =>
                [remark] =>
            )

        [1] => Array
            (
                [id] => 646
                [username] => xingyt
                [usertype] => AGENT
                [logintime] => 2016-08-11 14:32:16
                [loginip] => 223.104.63.7
                [loginaddr] =>
                [remark] =>
            )

    )

    2016-08-17 14:51:06

    #147 jake

    想做一个懒人 发表于 2016-8-17 14:51
    findAll绑定参数的方法查询不出结果,

    代码:
    你哪儿看的手册,最好看官网的谢谢:https://github.com/SpeedPHP/manual/blob/master/%E6%95%B0%E6%8D%AE%E6%93%8D%E4%BD%9C-%E6%95%B0%E6%8D%AE%E6%93%8D%E4%BD%9C%E6%95%99%E7%A8%8B.md

    QQ截图20160817145459.jpg


    2016-08-17 14:53:15

    #148 想做一个懒人

    看的是最初发布时下载的文档,新文档已经解决,谢谢

    2016-08-17 15:11:18

    #149 快信达

    新版不支持数据验证检查了吗?在手册里面没有看到

    2016-09-08 21:49:21

    #150 tphpn

    window下面使用PHP+Apache 端口不是默认的80,而是自定义的8080,旧版的框架都可以正常运行,但新的框架会提示,“配置域名不正确,请确认localhost:8080的配置是否存在!”,什么问题?

    2016-09-19 16:17:54

    #151 tphpn

    已解决,加了端口号,重新打开即可

    2016-09-19 16:44:06

    #152 tanxiaoming1989


    伪静态,怎么设置如下
    比如频道 我以/结尾  
    内容页我以.html结尾。
    请问怎么样才能做出这样的伪静态,求可用的例子代码。

    2016-11-02 17:39:25

    #153 xiaoziwuzui

    问一个关于路由配置的问题
    如果要把
    /category_111_1.html
    /category_111.html
    同时配置到 main/category 方法下,要怎么样配置?
    现有的url处理方法貌似无法实现这个 多个路径 指到同一个方法的需求

    2017-05-31 10:13:10

    #154 jake

    xiaoziwuzui 发表于 2017-5-31 10:13
    问一个关于路由配置的问题
    如果要把
    /category_111_1.html
    没看手册就乱猜什么

    "/category__.html" => "main/category"
    "/category_.html" => "main/category"


    有时间看看手册吧https://github.com/SpeedPHP/manual/blob/master/%E8%AE%BF%E9%97%AE%E4%BA%A4%E4%BA%92-%E4%BC%AA%E9%9D%99%E6%80%81%E5%8F%8AURL%E8%B7%B3%E8%BD%AC.md

    2017-05-31 10:58:58

    #155 xiaoziwuzui

    jake 发表于 2017-5-31 10:58
    没看手册就乱猜什么

    "/category__.html" => "main/category"
    我很明显研究过手册才来问的
    这样配置访问是没问题
    但是使用url方法生成的时候就有问题了,
    以下是截图

    未标题-1.jpg

    生成新的URL路径时,会出现只匹配到第一个的问题

    2017-05-31 14:45:09

    #156 jake

    手册写的:越是明确指向的URL配置,越要放前面。

    把规则上下换一下位置就行

    2017-05-31 15:43:28

    #157 oo7

    新版框架报500错误,按照git上教程操作的,HTTP ERROR 500
    老版框架没有问题
    是有什么地方需要配置吗?

    2017-09-19 22:21:02

    #158 jake

    oo7 发表于 2017-9-19 22:21
    新版框架报500错误,按照git上教程操作的,HTTP ERROR 500
    老版框架没有问题
    是有什么地方需要配置吗? ...
    500就是php出错,可以看看服务器软件的日志,里面应该会有php错误记录的。

    2017-09-20 10:41:13

    #159 oo7

    jake 发表于 2017-9-20 10:41
    500就是php出错,可以看看服务器软件的日志,里面应该会有php错误记录的。
    ...
    问题已解决。感谢jake老大!
    不过是什么原因我一直没搞明白,我用的是php7.0版本。
    起先我一步一步跟踪到  “return $domain[$_SERVER["HTTP_HOST"]] + $config;”,
    发现在这里出的问题,然后我试着挨个输出数组,开始单个数组不能输出,后来不知道怎么就可以了,然后就莫名的好了,成功输出了“Hello World”.

    2017-09-20 20:09:23

    #160 xzp44

    数据总数小于分页大小时,返回的分页数据为空。
    解决办法:代码276行,去掉if($total > $pageSize){...}判断。

    2019-04-09 23:30:18