求大神 thinkphp 模块如何访问模块下的方法

想做一个上传文件的进度条,求大神看~ - ThinkPHP框架
这是不用thinkphp框架写的
index.php文件&script&src=&/jquery-1.10.1.min.js&&&/script&
&form&id=&upload-form&
&&&&action=&upload.php&&method=&POST&&enctype=&multipart/form-data&
&&&&style=&margin:15px&0&&target=&hidden_iframe&&
&&&&&&&&&input&type=&hidden&&name=&&?php&echo&ini_get(&session.upload_progress.name&);&?&&&value=&test&&/&
&&&&&&&&&p&&input&type=&file&&name=&file1&&/&&/p&&
&&&&&&&&&p&&input&type=&submit&&value=&Upload&&/&&/p&
&/form&&&&&&
&iframe&id=&hidden_iframe&&name=&hidden_iframe&&src=&about:blank&&style=&display:&&&/iframe&
&div&id=&progress&&class=&progress&&style=&margin-bottom:15display:&&
&&&&&&&&&div&class=&bar&&style=&width:0%;&&&/div&
&&&&&&&&&div&class=&label&&0%&/div&
&&&&&&&&function&fetch_progress(){
&&&&&&&&&&&&$.get('progress.php',{&'&?php&echo&ini_get(&session.upload_progress.name&);&?&'&:&'test'},&function(data){
&&&&&&&&&&&&&&&&&&&&var&progress&=&parseInt(data);
&&&&&&&&&&&&&&&&&&&&$('#progress&.label').html(progress&+&'%');
&&&&&&&&&&&&&&&&&&&&$('#progress&.bar').css('width',&progress&+&'%');
&&&&&&&&&&&&&&&&&&&&if(progress&&&100){
&&&&&&&&&&&&&&&&&&&&&&&&&&&&setTimeout('fetch_progress()',&100);
&&&&&&&&&&&&&&&&&&&&}else{
&&&&&&&&&&&&&&&&$('#progress&.label').html('完成!');
&&&&&&&&&&&&}
&&&&&&&&&&&&},&'html');
&&&&$('#upload-form').submit(function(){
&&&&&&&&&&&&$('#progress').show();
&&&&&&&&&&&&setTimeout('fetch_progress()',&100);
&/script&upload.php文件&?php
if(is_uploaded_file($_FILES['file1']['tmp_name'])){
&&&&&&&&move_uploaded_file($_FILES['file1']['tmp_name'],&&./{$_FILES['file1']['name']}&);
?&progress.php文件&?php
session_start();
$i&=&ini_get('session.upload_progress.name');
$key&=&ini_get(&session.upload_progress.prefix&)&.&$_GET[$i];
if&(!empty($_SESSION[$key]))&{
&&&&&&&&$current&=&$_SESSION[$key][&bytes_processed&];
&&&&&&&&$total&=&$_SESSION[$key][&content_length&];
&&&&&&&&echo&$current&&&$total&?&ceil($current&/&$total&*&100)&:&100;
&&&&&&&&echo&100;
?&在xmapp中测试是成功的 能够看到从1%变到100% 本地测试要文件够大哈,
php.ini中的配置也是修改好的。
然后是在thinkphp中配置 action是这样的&?php
//&本类由系统自动生成,仅供测试用途
class&AddnewsAction&extends&Action&{
&&&&public&function&index(){
&&&&&&&&$this-&display();
&&&&public&function&uploadvideo(){
&&&&&&&&if(is_uploaded_file($_FILES['file1']['tmp_name']))
&&&&&&&&&&{
&&&&&&&&&&&&&&echo&(&$file&is&uploaded&via&HTTP&POST&);
&&&&&&&&&&&&&&}
&&&&&&&&&&&&else
&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&echo&(&$file&is&not&uploaded&via&HTTP&POST&);
&&&&&&&&&&}
&&&&&&&&if(is_uploaded_file($_FILES['file1']['tmp_name'])){
&&&&&&&&&&&&&&&&move_uploaded_file($_FILES['file1']['tmp_name'],&&./{$_FILES['file1']['name']}&);
&&&&&&&&}&&&&
&&&&public&function&progress(){
&&&&&&&&session_start();
&&&&&&&&$i&=&ini_get('session.upload_progress.name');
&&&&&&&&$key&=&ini_get(&session.upload_progress.prefix&)&.&$_GET[$i];
&&&&&&&&if&(!empty($_SESSION[$key]))&{
&&&&&&&&&&&&&&&&$current&=&$_SESSION[$key][&bytes_processed&];
&&&&&&&&&&&&&&&&$total&=&$_SESSION[$key][&content_length&];
&&&&&&&&&&&&&&&&echo&$current&&&$total&?&ceil($current&/&$total&*&100)&:&100;
&&&&&&&&}else{
&&&&&&&&&&&&&&&&echo&100;
}页面代码当然还是和那个差不多只是修改了地址;
但是功能却不能实现了
通过progress()返回的数据直接是100;
通过测试发现那个是session中的值是空的;
不知道为什么。是因为thinkphp的原因?
原生开发者有福啦!只要开发任意原生小模块并发布到APICloud模块Store,APICloud就给你发红包!
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。thinkphp当前操作方法调用其他操作方法的值_百度知道
thinkphp当前操作方法调用其他操作方法的值
我在当前模块的 index操作中获取了一个id,然后想在当前模块的另一个操作方法中想使用这个id值,该怎么传过来呢,求大神
getId(),比如protected function getId(){$id = /获取方法return $id}其他方法中进行调用$id = $this-&&#47将获取ID的用另外的方法封装
其他类似问题
按默认排序
其他2条回答
在index对应的模版中写一个隐藏表单来接收id的值 再提交给另一个操作方法
如果你是在index方法总调用本模块的方法 则直接调用方法 $this -& fun($id);如果要求在直接调用目标方法则可以通过传值的方法
谢谢,已经解决了
thinkphp的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁2044人阅读
注意:这篇转载的文章比较早,写得很清晰,但是新版的ffmpeg的很多数据结构的名字已经改了。因此只能作参考。(例如ByteIOContext已经改名为AVIOContext)
ffmpeg项目的数据IO部分主要是在libavformat库中实现,某些对于内存的操作部分在libavutil库中。数据IO是基于文件格式(Format)以及文件传输协议(Protocol)的,与具体的编解码标准无关。 ffmpeg工程转码时数据IO层次关系如图所示:
对于上面的数据IO流程,具体可以用下面的例子来说明,我们从一个http服务器获取音视频数据,格式是flv的,需要通过转码后变成avi格式,然后通过udp协议进行发布。
其过程就如下所示:
1、读入http协议数据流,根据http协议获取真正的文件数据(去除无关报文信息);
2、根据flv格式对数据进行解封装;
3、读取帧进行转码操作;
4、按照目标格式avi进行封装;
5、通过udp协议发送出去。
2相关数据结构介绍
在libavformat库中与数据IO相关的数据结构主要有URLProtocol、URLContext、ByteIOContext、AVFormatContext等,各结构之间的关系如图所示。
1、URLProtocol结构
表示广义的输入文件,该结构体提供了很多的功能函数,每一种广义的输入文件(如:file、pipe、tcp、rtp等等)对应着一个URLProtocol结构,在av_register_all()中将该结构体初始化为一个链表,表头为avio.c里的URLProtocol *first_protocol = NULL;保存所有支持的输入文件协议,该结构体的定义如下:
typedef struct URLProtocol
const char *
int (*url_open)(URLContext *h, const char *url, int flags);
int (*url_read)(URLContext *h, unsigned char *buf, int size);
int (*url_write)(URLContext *h, const unsigned char *buf, int size);
int64_t (*url_seek)(URLContext *h, int64_t pos, int whence);
int (*url_close)(URLContext *h); struct URLProtocol *
int (*url_read_pause)(URLContext *h, int pause);
int64_t (*url_read_seek)(URLContext *h, int stream_index,
int64_t timestamp, int flags);
int (*url_get_file_handle)(URLContext *h);
int priv_data_
const AVClass *priv_data_
int (*url_check)(URLContext *h, int mask);
注意到,URLProtocol是一个链表结构,这是为了协议的统一管理,ffmpeg项目中将所有的用到的协议都存放在一个全局变量first_protocol中,协议的注册是在av_register_all中完成的,新添加单个协议可以调用av_register_protocol2函数实现。而协议的注册就是将具体的协议对象添加至first_protocol链表的末尾。
URLProtocol在各个具体的文件协议中有一个具体的实例,如在file协议中定义为:
URLProtocol ff_file_protocol = {
.name = &file&,
.url_open = file_open,
.url_read = file_read,
.url_write = file_write,
.url_seek = file_seek,
.url_close = file_close,
.url_get_file_handle = file_get_handle,
.url_check = file_check,
2、URLContext结构
URLContext提供了与当前打开的具体的文件协议(URL)相关数据的描述,在该结构中定义了指定当前URL(即filename项)所要用到的具体的URLProtocol,即:提供了一个在URLprotocol链表中找到具体项的依据,此外还有一些其它的标志性的信息,如flags, is_streamed等。它可以看成某一种协议的载体。其结构定义如下:
typedef struct URLContext
const AVClass *av_ ///& information for av_log(). Set by url_open().
struct URLProtocol *
int is_ //& true if streamed (no seek possible), default = false * int max_packet_
void *priv_
char * //& specified URL
那么ffmpeg依据什么信息初始化URLContext?然后又是如何初始化URLContext的呢?在打开一个URL时,全局函数ffurl_open会根据filename的前缀信息来确定URL所使用的具体协议,并为该协议分配好资源,再调用ffurl_connect函数打开具体协议,即调用协议的url_open,调用关系如下:
int av_open_input_file(AVFormatContext **ic_ptr, const char *filename, AVInputFormat *fmt, int buf_size, AVFormatParameters *ap)
int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options)
static int init_input(AVFormatContext *s, const char *filename)
int avio_open(AVIOContext **s, const char *filename, int flags)
int ffurl_open(URLContext **puc, const char *filename, int flags)
int ffurl_alloc(URLContext **puc, const char *filename, int flags)
static int url_alloc_for_protocol (URLContext **puc, struct URLProtocol *up, const char *filename, int flags)
浅蓝色部分的函数完成了URLContext函数的初始化,URLContext使ffmpeg外所暴露的接口是统一的,而不是对于不同的协议用不同的函数,这也是面向对象思维的体现。在此结构中还有一个值得说的是priv_data项,这是结构的一个可扩展项,具体协议可以根据需要添加相应的结构,将指针保存在这就行。
3、AVIOContext结构
AVIOContext(即:ByteIOContext)是由URLProtocol和URLContext结构扩展而来,也是ffmpeg提供给用户的接口,它将以上两种不带缓冲的读取文件抽象为带缓冲的读取和写入,为用户提供带缓冲的读取和写入操作。数据结构定义如下:
typedef struct {
unsigned char * /**& Start of the buffer. */
int buffer_ /**& Maximum buffer size */
unsigned char *buf_ /**& Current position in the buffer */
unsigned char *buf_
void * /关联URLContext
int (*read_packet)(void *opaque,uint8_t *buf,int buf_size);
int (*write_packet)(void *opaque,uint8_t *buf,int buf_size);
int64_t (*seek)(void *opaque,int64_t offset,int whence);
int eof_ /**& true if eof reached */
int write_ /**& true if open for writing */
int max_packet_
unsigned char *checksum_
unsigned long (*update_checksum)(unsigned long checksum,const uint8_t *buf,unsigned int size);
int (*read_pause)(void *opaque,int pause)
int64_t (*read_seek)(void *opaque,int stream_index,int64_t timestamp,int flags);
结构简单的为用户提供读写容易实现的四个操作,read_packet write_packet read_pause read_seek,极大的方便了文件的读取,四个函数在加了缓冲机制后被中转到,URLContext指向的实际的文件协议读写函数中。 下面给出0.8版本中是如何将AVIOContext的读写操作中转到实际文件中的。 在avio_open()函数中调用了ffio_fdopen()函数完成了对AVIOContex的初始化,其调用过程如下:
int avio_open(AVIOContext **s, const char *filename, int flags)
ffio_fdopen(s, h); //h是URLContext指针 ffio_init_context(*s, buffer, buffer_size, h-&flags & AVIO_FLAG_WRITE, h, (void*)
ffurl_read,(void*)ffurl_write,(void*)ffurl_seek)
蓝色部分的函数调用完成了对AVIOContext的初始化,在初始化的过程中,将AVIOContext的read_packet、write_packet、seek分别初始化为:ffurl_read ffurl_write ffurl_seek,而这三个函数又将具体的读写操作中转为:h-&prot-&url_read、h-&prot-&url_write、h-&prot-&url_seek,另外两个变量初始化时也被相应的中转,如下:
(*s)-&read_pause = (int (*)(void *, int))h-&prot-&url_read_
(*s)-&read_seek = (int64_t (*)(void *, int, int64_t, int))h-&prot-&url_read_
所以,可以简要的描述为:AVIOContext的接口口是加了缓冲后的URLProtocol的函数接口。
在aviobuf.c中定义了一系列关于ByteIOContext这个结构体的函数,如下 put_xxx系列:
put_xxx系列:
void put_byte(ByteIOContext *s, int b);
void put_buffer(ByteIOContext *s, const unsigned char *buf, int size);
void put_le64(ByteIOContext *s, uint64_t val);
void put_be64(ByteIOContext *s, uint64_t val);
void put_le32(ByteIOContext *s, unsigned int val);
void put_be32(ByteIOContext *s, unsigned int val);
void put_le24(ByteIOContext *s, unsigned int val);
void put_be24(ByteIOContext *s, unsigned int val);
void put_le16(ByteIOContext *s, unsigned int val);
void put_be16(ByteIOContext *s, unsigned int val);
void put_tag(ByteIOContext *s, const char *tag);
get_xxx系列:
int get_buffer(ByteIOContext *s, unsigned char *buf, int size);
int get_partial_buffer(ByteIOContext *s, unsigned char *buf, int size);
int get_byte(ByteIOContext *s);
unsigned int get_le24(ByteIOContext *s);
unsigned int get_le32(ByteIOContext *s);
uint64_t get_le64(ByteIOContext *s);
unsigned int get_le16(ByteIOContext *s);
char *get_strz(ByteIOContext *s, char *buf, int maxlen);
unsigned int get_be16(ByteIOContext *s);
unsigned int get_be24(ByteIOContext *s);
unsigned int get_be32(ByteIOContext *s);
uint64_t get_be64(ByteIOContext *s);
这些put_xxx及get_xxx函数是用于从缓冲区buffer中写入或者读取若干个字节,对于读写整型数据,分别实现了大端和小端字节序的版本。而缓冲区buffer中的数据又是从何而来呢,有一个fill_buffer的函数,在fill_buffer函数中调用了ByteIOContext结构的read_packet接口。在调用put_xxx函数时,并没有直接进行真正写入操作,而是先缓存起来,直到缓存达到最大限制或调用flush_buffer函数对缓冲区进行刷新,才使用write_packet函数进行写入操作。
原文地址:
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1153500次
积分:17940
积分:17940
排名:第171名
原创:283篇
转载:150篇
译文:28篇
评论:2122条
非常非常感谢CSDN评委会以及各位朋友的支持!刚刚收到消息。今后我一定会继续努力,认真研究视音频技术,分享更多的经验,争取把博客维护得更好!
姓名:雷霄骅
网名:leixiaohua1020
中国传媒大学-广播电视工程
中国传媒大学-数字电视技术
中国传媒大学-数字视频技术
主要从事与广播电视有关的视音频技术的研究。包括视音频质量评价,视音频编解码,流媒体,媒资检索等。
【SourceForge】【主】
【Github】
【开源中国】
欢迎转载本博客原创或翻译文章,但请声明出处,谢谢!
建了一个QQ群,希望把搞视音频技术的人联合起来方便交流,无论是实验室,电视台,互联网视频,安防,播放器,媒体中心等等都可以加入讨论。欢迎新手和大牛,多交流可以更快的进步~
在QQ群1000人的容量即将达到上限的时候,发了一个捐助贴。在不到一个小时的时间里,就凑齐了QQ升级"超级大群"的费用。在此感谢全国各地各位同仁的支持!也让我领会到了自己工作的意义。捐助人员列表已经发在了“群公告”里面。捐助的经费有一些剩余,这部分经费将会保留用于该群未来的续费。我会一直维护下去,争取把这个群建设的更好,和朋友们一起给中国的视音频技术出一份力!
文章:72篇
阅读:395555
文章:73篇
阅读:199143
文章:41篇
阅读:87300求大神帮忙,thinkPHP的数据库连接问题
[问题点数:40分]
求大神帮忙,thinkPHP的数据库连接问题
[问题点数:40分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
2013年5月 总版技术专家分月排行榜第一
2014年11月论坛优秀版主
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。

我要回帖

更多关于 thinkphp添加模块 的文章

 

随机推荐