对于想了解php–Apache访问linux中的NTFS链接文件夹的读者,本文将是一篇不可错过的文章,我们将详细介绍linux怎么访问php页面,并且为您提供关于.net–是否可以使用PHP访问Lin
对于想了解php – Apache访问linux中的NTFS链接文件夹的读者,本文将是一篇不可错过的文章,我们将详细介绍linux怎么访问php页面,并且为您提供关于.net – 是否可以使用PHP访问Linux中的COM对象?、Apache访问Linux中的NTFS链接文件夹、cephfs linux kernel client 针对 linux page cache 的操作、cephfs linux kernel client针对linux page cache的操作的有价值信息。
本文目录一览:- php – Apache访问linux中的NTFS链接文件夹(linux怎么访问php页面)
- .net – 是否可以使用PHP访问Linux中的COM对象?
- Apache访问Linux中的NTFS链接文件夹
- cephfs linux kernel client 针对 linux page cache 的操作
- cephfs linux kernel client针对linux page cache的操作
php – Apache访问linux中的NTFS链接文件夹(linux怎么访问php页面)
ln -s /home/myname/mynewcode /var/www/test1 chown -R www-data:www-data /home/myname/mynewcode chmod -R 755 /home/myname/mynewcode
然后我可以访问http://localhost/test1
但是当我想链接它的真正的文件夹,是在一个NTFS分区,因为chown和chmod不起作用,我修改/ etc / fstab通过添加以下代码,因此我的NTFS分区将挂载所需的权限和所有者.
UUID=XXDDXDDXDDDXdddd /media/myname/lable ntfs user,exec,uid=www-data,gid=www-data 0 2 ln -s /media/myname/lable/mynewcode2 /var/www/test2
但是我仍然从Apache2获取权限错误,我不知道该怎么做!
Forbidden
You don’t have permission to access /test2 on this server.
Apache/2.4.10 (Debian) Server at localhost Port 80
mount -t cifs // windows_host / share / var / www / test2 uid = xxx,gid = xxx,rw,sec = ntlmv 0 0
所以你不需要直接处理NTFS.
.net – 是否可以使用PHP访问Linux中的COM对象?
一位朋友向我展示了一个用COM对象和SOAP接口构建的API.他向我展示了它在Windows上的PHP是如何工作的,但是我很怀疑它是否可以在linux或任何其他非Windows操作系统上实现.谢谢!
解决方法:
取决于COM对象的运行位置. Linux框可以将COM对象(ActiveX)提供给Windows客户端浏览器. Linux框可以对Windows框上运行的COM对象进行SOAP调用.
但是如果你想在Linux上运行COM对象,至少需要为Linux重建它,并且可能需要更多的Linuxy(一个.so).可能任何PHP COM支持都没有移植到Linux版本,但您可以通过C绑定调用.so文件.
Apache访问Linux中的NTFS链接文件夹
在Debian jessie中使用Apache2 / PHP,当我想在Apache(/ var / www)的文档文件夹中创build一个新的子节点时,我只需创build一个链接到一个外部文件夹,在这里我的PHP文件存在,只需更改所有者和权限文件夹如下,它的作品完美。
ln -s /home/myname/mynewcode /var/www/test1 chown -R www-data:www-data /home/myname/mynewcode chmod -R 755 /home/myname/mynewcode
然后我可以访问http:// localhost / test1
但是,当我想要链接它的实际文件夹是在NTFS分区,因为chown和chmod不起作用,所以我通过添加以下代码来修改/ etc / fstab,因此我的NTFS分区将以所需的权限所有者。
UUID=XXDDXDDXDDDXdddd /media/myname/lable ntfs user,exec,uid=www-data,gid=www-data 0 2 ln -s /media/myname/lable/mynewcode2 /var/www/test2
但是,我仍然从Apache2获得许可错误,我不知道该怎么做!
Mediawiki在subdirectory和SubDomain上
403禁止您无权访问此服务器上的/ folder-name /
如何使用Apache / PHP的葡萄酒? – ''/ var / www''不属于你
Django性能/内存使用情况
CouchDB的代理? Apache作为一个反向代理?
被禁止
您无权访问此服务器上的/ test2。
本地端口80上的Apache / 2.4.10(Debian)服务器
反向代理与连接池使用自定义会话端点?
Apache POI autoSizeColumn()不能正常工作
Unoconv作为apache用户无法创build文件
closures规范的全球XSS过滤。 控制器?
Codeigniter Htaccess和URLredirect问题
我假设NTFS分区属于Windows机器? 您可以在Windows中共享它,并将其安装在Debian中
mount -t cifs //windows_host/share /var/www/test2 uid=xxx,gid=xxx,rw,sec=ntlmv 0 0
所以你不需要直接处理NTFS。
我不能提供100%的工作解决方案,但我有两点,你可能要检查。
首先,尝试将umask添加到fstab行。 我认为这会导致权限错误。 umask在安装时向所有文件(644)和目录(755)添加正确的权限。 您必须重新安装NTFS文件夹!
UUID=XXDDXDDXDDDXdddd /media/myname/lable ntfs user,gid=www-data,umask=022 0 2
您需要确保www-data用户能够将cd放入目标文件夹中:
sudo su www-data -s bash && cd /media/myname/lable
其次,确保“FollowSymlinks”被允许在特定的文件夹上,我想你已经有了,但试试看:
<Directory "/media/myname/lable/"> Options FollowSymLinks +Indexes AllowOverride None Order allow,deny Allow from all </Directory> <Directory "/var/www"> Options FollowSymLinks +Indexes AllowOverride None Order allow,deny Allow from all </Directory>
总结
以上是小编为你收集整理的Apache访问Linux中的NTFS链接文件夹全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
cephfs linux kernel client 针对 linux page cache 的操作
针对 linux page cache 的操作主要体现在 struct address_space_operations 数据结构中,cephfs 处理 linux page cache 的函数集合如下:
const struct address_space_operations ceph_aops = {
.readpage = ceph_readpage,
.readpages = ceph_readpages,
.writepage = ceph_writepage,
.writepages = ceph_writepages_start,
.write_begin = ceph_write_begin,
.write_end = ceph_write_end,
.set_page_dirty = ceph_set_page_dirty,
.invalidatepage = ceph_invalidatepage,
.releasepage = ceph_releasepage,
.direct_IO = ceph_direct_io,
};
ceph_readpage(struct file *filp, struct page *page)
|__调用 readpage_nounlock (filep, page) 在加锁的情况下读取一个物理内存页的数据
|__确定 page 的 offset 没有超出 inode 的总长度
|__调用 ceph_readpage_from_fscache () 函数尝试从 fscache 中读取一个物理内存页的数据
|__若读取成功则直接返回
|__调用 ceph_osdc_readpages () 函数从 ceph 集群中读取一个物理内存页的数据
|__调用 ceph_osdc_new_reqeust () 函数创建一个读请求
|__调用 osd_req_op_extent_osd_data_pages () 函数为读请求的返回内容分配内存空间
|__调用 ceph_osdc_start_request () 函数将读请求同步发送给 ceph 集群
|__调用 flush_dcache_page () 函数刷 page 到 dcache 中
|__调用 SetPageUptodate () 函数设置物理内存页的状态是 update 的
|__调用 ceph_readpage_to_fscache () 函数将新读到的物理内存页更新到 fscache 中
|__调用 unlock_page (page)
|__调用 clear_bit_unlock () 函数为 page 解锁
|__调用 wake_up_page () 函数唤醒等待该 page 的相关进程
ceph_readpages (struct file *file, struct address_space *mapping, struct list_head *page_list, unsigned nr_pages) 读取多个页
|__调用 ceph_readpages_from_fscache () 函数尝试从 fscache 中读取多个物理内存页的数据
|__若读取成功则直接返回
|__遍历 page_list
|__调用 start_read () 函数读取数据到 page_list 所包含的物理内存页
|__调用 ceph_osdc_new_reqeust () 函数创建一个读请求
|__调用 calc_pages_for (0, len) 函数得到读取指定长度 len 的数据需要的物理内存页数
|__从 page_list 中摘下指定数量的物理内存页
|__调用 osd_req_op_extent_osd_data_pages () 函数将从 page_list 中摘下的物理内存页作为读请求的接收缓冲
|__设置读请求完成后的回调函数为 finish_read ()
|__调用 ceph_osdc_start_request () 函数将读请求同步发送给 ceph 集群
finish_read (struct ceph_osd_request *req) 从 ceph 集群中读操作结束后的回调函数
|__遍历读取到的所有物理内存页
|__调用 flush_dcache_page () 函数将 page 中的内存刷到 dcache 中
|__调用 SetPageUptodate () 函数设置 page 的状态是 uptodate 的
|__调用 ceph_readpage_to_fscache () 函数将读取到的 page 内存同步到 fscache 中
ceph_writepage(struct page *page, struct writeback_control *wbc)
|__调用 writepage_nounlock (page,wbc) 函数同步 page 信息到 ceph 集群
|__调用 page_snap_context () 函数得到 page 的 snap context 信息 (page 将 CephSnapContext 信息写入到 page 的 private 中)
|__调用 set_page_writeback (page) 函数设置 page writeback 标识
|__调用 ceph_osdc_writepages () 函数将 page 信息同步写到 ceph 集群
|__调用 ceph_osdc_new_reqeust () 函数创建一个写请求
|__调用 osd_req_op_extent_osd_data_pages () 函数为写请求设置写内容物理内存页
|__调用 ceph_osdc_start_request () 函数将写请求同步发送给 ceph 集群
|__设置 page->private=0,即:删除 page 的 CephSnapContext 信息
|__调用 ClearPagePrivate (page) 函数清空 page 的 private
|__调用 end_page_writeback () 函数
|__调用 wake_up_page (page, PG_writeback) 函数唤醒在 page 上等待 writeback 完成的进程
ceph_writepages_start(struct address_space *mapping, struct writeback_control *wbc)
|__调用 pagevec_init (&pvec, 0) 函数初始化 struct pagevec 实例 pvec
|__从 wbc 的 range_start 和 range_end 中得到 start 和 end
|__调用 pagevec_lookup_tag (&pvec, mapping, PAGECACHE_TAG_DIRTY…) 函数从 mapping 中 radix tree 中找到 tags==PAGECACHE_TAG_DIRTY 的所有 pages 且将所有 pages 写入到 pvec 中
|__遍历所有 PAGECACHE_TAG_DIRTY 的 pages
|__调用 page_offset () 函数得到 page 所在的 offset 值
|__调用 ceph_calc_file_object_mapping () 函数得到从 offset 开始,长度是 len 的文件所占用的 objects 个数以及在 object 中的偏移
|__将 page 添加到 pages 数组中
|__从 pages 数组中得到 offset 值,即:offset=page_offset (pages [0])
|__调用 ceph_osdc_new_request () 函数创建一个写数据请求
|__设置写数据请求的回调函数为 writepages_finish
|__调用 osd_req_op_extent_osd_data_pages () 函数添加写请求额外的数据
|__调用 ceph_osdc_start_request () 函数将写请求同步发送到 ceph 集群
writepages_finish(struct ceph_osd_request *req)
|__清除所有在发送写请求过程中产生的内存
ceph_write_begin(struct file *file, struct address_space *mapping, loff_t pos, unsigned len, unsigend flags, staruct page **pagep, void **fsdata)
|__得到 pos 所在的 page 位置,即:index=pos >> PAGE_SHIFT
|__调用 grab_cache_page_write_begin (mapping, index, flags) 函数在 pagecache 中指定位置 index 出获取或创建一个物理内存页 page
|__调用 pagecache_get_page () 函数在 pagecache 中指定位置 index 出获取或创建一个物理内存页 page
|__调用 wait_for_stable_page (page) 函数等待该 page 上的 writeback 函数返回
|__调用 ceph_update_writeable_page (file, pos, len, page) 函数只允许往 clean page 里写入数据或者已经 dirty 的 snap context 里写入数据
|__调用 wait_on_page_writeback (page) 函数等待 page 的 writeback 完成
|__调用 page_snap_context (page) 函数得到该 page 的 snap context
|__若 snap context 的 seq > oldest->seq
|__调用 ceph_queue_writeback (inode) 函数将 inode 放入到 writeback 队列中
|__调用 clear_page_dirty_for_io (page) 函数清除 page 上的 dirty 标识
|__调用 writepage_nounlock (page, NULL) 函数将 page 数据同步的写入到 ceph 集群
|__调用 PageUptodate (page) 检查 page 是否是 uptodate 的
|__是则直接返回
|__若 page 已经满了
|__直接返回
|__调用 i_size_read (inode) 函数得到 inode 的读数据的大小
|__调用 readpage_nounlock (file, page) 函数从 ceph 集群中读取数据到 page 中
ceph_write_end(struct file *file, struct address_space *mapping, loff_t pos, unsigned len, unsigned copied, struct page **page, void *fsdata)
|__若 copied < len
|__调用 zero_user_segment (page, from+copied, len) 函数将 page 中从 from+copied 一直到 from+copied+len 的内存空间置 0
|__若 pos+copied > i_size_read (inode)
|__调用 ceph_inode_set_size () 函数设置 inode 的 size 为 pos+copied
|__若 Page 不是 uptodate 的
|__调用 SetPageUptodate (page) 函数设置 page 是 uptodate 的
|__调用 set_page_dirty (page) 函数设置 page 是 dirty 的
ceph_set_page_dirty(struct page *page)
|__若 PageDirty (page)
|__直接返回
|__通过 mapping 的到 struct ceph_inode_info 结构
|__调用__ceph_have_pending_cap_snap () 函数检查 cephfs 是否有 snaps
|__从 struct ceph_inode_info 结构中的 i_cap_snaps 列表中得到 struct ceph_cap_snap 结构
|__从 struct ceph_cap_snap 结构中得到 struct ceph_snap_context 结构
|__若 cephfs 没有 snaps
|__调用 ceph_get_snap_context () 函数从 struct ceph_inode_info 的 i_head_spapc 中得到 struct ceph_snap_context 结构
|__将 struct ceph_snap_context 结构设置到 page 的 private 中,即:page->private=snapc
|__调用__set_page_dirty_nobuffers () 函数将 page 在 address_spaces 中的 radix tree 中设置成 dirty
ceph_invalidatepage(struct page *page, unsigned int offset, unsigned int length)
|__调用 ceph_invalidate_fscache_page () 函数使得 page 在 fscache 中无效
|__若 page 没有 private
|__直接返回
|__设置 page->private=0 清除 page 的 snaps
|__调用 ClearPagePriavte (page)
ceph_releasepage(struct page *page, gfp_t g)
|__调用 ceph_release_fscache_page () 函数在 fscache 中删除 page
|__返回!PagePrivate (page)
ceph_direct_io(struct kiocb *iocb, struct iov_iter *iter)
|__返回 - EINVAL
cephfs linux kernel client针对linux page cache的操作
针对linux page cache的操作主要体现在struct address_space_operations数据结构中,cephfs处理linux page cache的函数集合如下:
const struct address_space_operations ceph_aops = {
.readpage = ceph_readpage,
.readpages = ceph_readpages,
.writepage = ceph_writepage,
.writepages = ceph_writepages_start,
.write_begin = ceph_write_begin,
.write_end = ceph_write_end,
.set_page_dirty = ceph_set_page_dirty,
.invalidatepage = ceph_invalidatepage,
.releasepage = ceph_releasepage,
.direct_IO = ceph_direct_io,
};
ceph_readpage(struct file *filp, struct page *page)
|__调用readpage_nounlock(filep, page) 在加锁的情况下读取一个物理内存页的数据
|__确定page的offset没有超出inode的总长度
|__调用ceph_readpage_from_fscache()函数尝试从fscache中读取一个物理内存页的数据
|__若读取成功则直接返回
|__调用ceph_osdc_readpages()函数从ceph集群中读取一个物理内存页的数据
|__调用ceph_osdc_new_reqeust()函数创建一个读请求
|__调用osd_req_op_extent_osd_data_pages()函数为读请求的返回内容分配内存空间
|__调用ceph_osdc_start_request()函数将读请求同步发送给ceph集群
|__调用flush_dcache_page()函数刷page到dcache中
|__调用SetPageUptodate()函数设置物理内存页的状态是update的
|__调用ceph_readpage_to_fscache()函数将新读到的物理内存页更新到fscache中
|__调用unlock_page(page)
|__调用clear_bit_unlock()函数为page解锁
|__调用wake_up_page()函数唤醒等待该page的相关进程
ceph_readpages(struct file *file, struct address_space *mapping, struct list_head *page_list, unsigned nr_pages) 读取多个页
|__调用ceph_readpages_from_fscache()函数尝试从fscache中读取多个物理内存页的数据
|__若读取成功则直接返回
|__遍历page_list
|__调用start_read()函数读取数据到page_list所包含的物理内存页
|__调用ceph_osdc_new_reqeust()函数创建一个读请求
|__调用calc_pages_for(0, len)函数得到读取指定长度len的数据需要的物理内存页数
|__从page_list中摘下指定数量的物理内存页
|__调用osd_req_op_extent_osd_data_pages()函数将从page_list中摘下的物理内存页作为读请求的接收缓冲
|__设置读请求完成后的回调函数为finish_read()
|__调用ceph_osdc_start_request()函数将读请求同步发送给ceph集群
finish_read(struct ceph_osd_request *req) 从ceph集群中读操作结束后的回调函数
|__遍历读取到的所有物理内存页
|__调用flush_dcache_page()函数将page中的内存刷到dcache中
|__调用SetPageUptodate()函数设置page的状态是uptodate的
|__调用ceph_readpage_to_fscache()函数将读取到的page内存同步到fscache中
ceph_writepage(struct page *page, struct writeback_control *wbc)
|__调用writepage_nounlock(page,wbc)函数同步page信息到ceph集群
|__调用page_snap_context()函数得到page的snap context信息(page将CephSnapContext信息写入到page的private中)
|__调用set_page_writeback(page)函数设置page writeback标识
|__调用ceph_osdc_writepages()函数将page信息同步写到ceph集群
|__调用ceph_osdc_new_reqeust()函数创建一个写请求
|__调用osd_req_op_extent_osd_data_pages()函数为写请求设置写内容物理内存页
|__调用ceph_osdc_start_request()函数将写请求同步发送给ceph集群
|__设置page->private=0,即:删除page的CephSnapContext信息
|__调用ClearPagePrivate(page)函数清空page的private
|__调用end_page_writeback()函数
|__调用wake_up_page(page, PG_writeback)函数唤醒在page上等待writeback完成的进程
ceph_writepages_start(struct address_space *mapping, struct writeback_control *wbc)
|__调用pagevec_init(&pvec, 0)函数初始化struct pagevec实例pvec
|__从wbc的range_start和range_end中得到start和end
|__调用pagevec_lookup_tag(&pvec, mapping, PAGECACHE_TAG_DIRTY…)函数从mapping中radix tree中找到tags==PAGECACHE_TAG_DIRTY的所有pages且将所有pages写入到pvec中
|__遍历所有PAGECACHE_TAG_DIRTY的pages
|__调用page_offset()函数得到page所在的offset值
|__调用ceph_calc_file_object_mapping()函数得到从offset开始,长度是len的文件所占用的objects个数以及在object中的偏移
|__将page添加到pages数组中
|__从pages数组中得到offset值,即:offset=page_offset(pages[0])
|__调用ceph_osdc_new_request()函数创建一个写数据请求
|__设置写数据请求的回调函数为writepages_finish
|__调用osd_req_op_extent_osd_data_pages()函数添加写请求额外的数据
|__调用ceph_osdc_start_request()函数将写请求同步发送到ceph集群
writepages_finish(struct ceph_osd_request *req)
|__清除所有在发送写请求过程中产生的内存
ceph_write_begin(struct file *file, struct address_space *mapping, loff_t pos, unsigned len, unsigend flags, staruct page **pagep, void **fsdata)
|__得到pos所在的page位置,即:index=pos >> PAGE_SHIFT
|__调用grab_cache_page_write_begin(mapping, index, flags)函数在pagecache中指定位置index出获取或创建一个物理内存页page
|__调用pagecache_get_page()函数在pagecache中指定位置index出获取或创建一个物理内存页page
|__调用wait_for_stable_page(page)函数等待该page上的writeback函数返回
|__调用ceph_update_writeable_page(file, pos, len, page)函数只允许往clean page里写入数据或者已经dirty的snap context里写入数据
|__调用wait_on_page_writeback(page)函数等待page的writeback完成
|__调用page_snap_context(page)函数得到该page的snap context
|__若snap context的seq > oldest->seq
|__调用ceph_queue_writeback(inode)函数将inode放入到writeback队列中
|__调用clear_page_dirty_for_io(page)函数清除page上的dirty标识
|__调用writepage_nounlock(page, NULL)函数将page数据同步的写入到ceph集群
|__调用PageUptodate(page)检查page是否是uptodate的
|__是则直接返回
|__若page已经满了
|__直接返回
|__调用i_size_read(inode)函数得到inode的读数据的大小
|__调用readpage_nounlock(file, page)函数从ceph集群中读取数据到page中
ceph_write_end(struct file *file, struct address_space *mapping, loff_t pos, unsigned len, unsigned copied, struct page **page, void *fsdata)
|__若copied < len
|__调用zero_user_segment(page, from+copied, len)函数将page中从from+copied一直到from+copied+len的内存空间置0
|__若pos+copied > i_size_read(inode)
|__调用ceph_inode_set_size()函数设置inode的size为pos+copied
|__若Page不是uptodate的
|__调用SetPageUptodate(page)函数设置page是uptodate的
|__调用set_page_dirty(page)函数设置page是dirty的
ceph_set_page_dirty(struct page *page)
|__若PageDirty(page)
|__直接返回
|__通过mapping的到struct ceph_inode_info结构
|__调用__ceph_have_pending_cap_snap()函数检查cephfs是否有snaps
|__从struct ceph_inode_info结构中的i_cap_snaps列表中得到struct ceph_cap_snap结构
|__从struct ceph_cap_snap结构中得到struct ceph_snap_context结构
|__若cephfs没有snaps
|__调用ceph_get_snap_context()函数从struct ceph_inode_info的i_head_spapc中得到struct ceph_snap_context结构
|__将struct ceph_snap_context结构设置到page的private中,即:page->private=snapc
|__调用__set_page_dirty_nobuffers()函数将page在address_spaces中的radix tree中设置成dirty
ceph_invalidatepage(struct page *page, unsigned int offset, unsigned int length)
|__调用ceph_invalidate_fscache_page()函数使得page在fscache中无效
|__若page没有private
|__直接返回
|__设置page->private=0清除page的snaps
|__调用ClearPagePriavte(page)
ceph_releasepage(struct page *page, gfp_t g)
|__调用ceph_release_fscache_page()函数在fscache中删除page
|__返回!PagePrivate(page)
ceph_direct_io(struct kiocb *iocb, struct iov_iter *iter)
|__返回-EINVAL
今天关于php – Apache访问linux中的NTFS链接文件夹和linux怎么访问php页面的分享就到这里,希望大家有所收获,若想了解更多关于.net – 是否可以使用PHP访问Linux中的COM对象?、Apache访问Linux中的NTFS链接文件夹、cephfs linux kernel client 针对 linux page cache 的操作、cephfs linux kernel client针对linux page cache的操作等相关知识,可以在本站进行查询。
本文标签: