- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章PHP与服务器文件系统的简单交互由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1、php.ini中关于文件上传的设置指令 。
2、文件上传过程 。
(1)上传文件提交表单html代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<!--向服务器上传文件的HTML表单(限制为文本文件)-->
<!DOCTYPE html>
<html lang=
"en"
>
<head>
<meta charset=
"UTF-8"
>
<title>Adminstration - upoload
new
files</title>
</head>
<body>
<h1>Upload
new
files</h1>
<form action=
"upload.php"
method=
"post"
enctyple=
"multipart/form-data"
>
<!--enctyple:规定在发送到服务器之前对表单数据进行编码的方式(在上传控件时必须按照以上方式设置该属性)-->
<div>
<input type=
"hidden"
name=
"MAX_FILE_SIZE"
value=
"1000000"
>
<!--规定传输文件的最大字节数-->
<label
for
=
"userfile"
>Upload a file</label>
<!--在<label>内点击文本,会触发该控件,此时浏览器会自动对焦到标签
for
属性所指向的表单控件上面-->
<input type=
"file"
name=
"userfile"
id=
"userfile"
>
<!--id属性为<label>标签
for
所指向控件元素的id号-->
<input type=
"submit"
value=
"Send File"
>
</div>
</form>
</body>
</html>
|
(2)php处理上传文件代码 。
①在php脚本中,需要处理的数据保存在超级变量数组$_FILES中,开启register_globals指令可以直接通过变量名访问这些信息; 。
②假如表单变量名为“username“则有:
$_FILES['userfile']['tmp_name']:储存文件在Web服务器中的临时保存位置; $_FILES['userfile']['name']:储存用户系统中文件的名称; $_FILES['userfile']['size']:储存文件的大小; $_FILES['userfile']['type']:储存文件的类型; $_FILES['userfile']['error]:储存任何与文件上传相关的错误代码; 。
错误类型说明:
UPLOAD_ERR_INI_SIZE:1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。 UPLOAD_ERR_FORM_SIZE:2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。 UPLOAD_ERR_PARTIAL:3,文件只有部分被上传。 UPLOAD_ERR_NO_FILE:4,没有文件被上传。 UPLOAD_ERR_NO_TMP_DIR:6,找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。 UPLOAD_ERR_CANT_WRITE:7,文件写入失败。PHP 5.1.0 引进.
③php代码 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
<?php
//检验文件传输异常
if
(
$_FILES
[
'userfile'
][
'error'
]>0){
echo
'Problem'
;
switch
(
$_FILES
[
'userfile'
][
'error'
]){
case
1:
echo
'File exceeded upload_max_filesize'
;
break
;
case
2:
echo
'File exceeded max_file_size'
;
break
;
case
3:
echo
'File only partially upload'
;
break
;
case
4:
echo
'No file uploaded'
;
break
;
case
6:
echo
'Cannot upload file: No temp directory specified'
;
break
;
case
7:
echo
'Upload failed:Cannot write to disk'
;
break
;
}
exit
;
}
//检验传输的文件是否为文本文件
if
(
$_FILES
[
'userfile'
][
'type'
] !=
'text/plain'
){
echo
'Problem: file is not plain text'
;
exit
;
}
//将上传文件包含在服务器中/uploads/的目录下(该目录必须独立于Web文档树)
$upfile
=
'/uploads/'
.
$_FILES
[
'userfile'
][
'name'
];
//在指定目录下以传输文件的文件名创建一个新文件
if
(
is_uploaded_file
(
$_FILES
[
'userfile'
][
'tmp_name'
])){
if
(! move_uploaded_file(
$_FILES
[
'userfile'
][
'tmp_name'
],
$upfile
)){
//将传输文件的临时文件移动到创建的新文件
echo
'Problem: Could not move file to destination directory'
;
exit
;
}
}
else
{
echo
'Problem: Possible file upload attack.Filename:'
;
echo
$_FILES
[
'username'
][
'name'
];
exit
;
}
echo
"File uploaded seuucessfully<br/><br/>"
;
//对传输文件清除html和php标记
$contents
=
file_get_contents
(
$upfile
);
//将文件内容提取为一个字符串;
$contents
=
strip_tags
(
$contents
);
//对该字符串擦除html和tags标记;
file_put_contents
(
$_FILES
[
'userfile'
][
'name'
],
$contents
);
//将该字符串重新写入文件中;
//在浏览器上显示传输的文本文件内容
echo
"<p>Preview of uploaded file contents:<br/><hr>>"
;
echo
nl2br
(
$contents
);
echo
"</br></hr>"
;
|
3、使用目录函数 。
(1)从目录中读取文件名 。
①使用opendir(),readdir(),closedir()函数; 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<?php
$current_dir
=
'/uploads/'
;
//创建目录url对象
$dir
= opendir(
$current_dir
);
//打开目录,结果返回一个目录对象
echo
"<p>Upload directory is $current_dir</p>"
;
echo
"<p>Directory Listing:</p><ul>"
;
while
((
$file
= readdir(
$dir
)) !== false){
//读取目录对象
if
(
$file
!=
"."
&&
$file
!=
".."
){
//过滤当前目录和上一级目录
echo
"<li>$file</li>"
;
echo
"<a href=\"filedetails.php?file=\'.$file.\'\">"
.
$file
.
"</a><br/>"
;
}
}
echo
"</ul>"
;
closedir
(
$dir
);
//关闭目录;
?>
|
②使用php的dir类 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<?php
$current_dir
=
'/uploads/'
;
//创建目录url对象
$dir
= dir(
$current_dir
);
//创建dir对象
echo
"<p>Handle is $dir->handle</p>"
;
echo
"<p>Upload directory is $current_dir</p>"
;
echo
"<p>Directory Listing:</p><ul>"
;
while
((
$file
=
$dir
->read()) !== false){
//通过dir对象读取目录下的文件名
if
(
$file
!=
"."
&&
$file
!=
".."
){
echo
"<li>$file</li>"
;
}
}
echo
"</ul>"
;
$dir
->close();
//关闭目录
?>
|
(2)使用scandir()函数对文本名称进行字母表的排序方式 。
1
2
3
4
5
6
7
8
9
10
11
12
|
<?php
$current_dir
=
'/uploads/'
;
//创建目录url对象
$files1
= scandir(
$current_dir
);
//将指定目录下的文件名保存为一个数组,默认以字母升序排序
$files2
= scandir(
$current_dir
,1);
//将指定目录下的文件名保存为一个数组,以字母降序排序
echo
"<p>Upload directory is $current_dir</p>"
;
echo
"<p>Directory Listing in alphabetical order,ascending:</p><ul>"
;
foreach
(
$files1
as
$file1
) {
if
(
$file1
!=
"."
&&
$file1
!=
".."
)
echo
"<li>$file1</li>"
;
}
echo
"</ul>"
;
?>
|
(3)获取当前目录的其他信息 。
dirname($path):返回路径的目录部分; 。
basename($path):返回路径的名称部分; 。
disk_free_space($path):返回路径所在磁盘可以保存上传文件的容量; 。
(4)创建和删除目录 。
①mkdir():创建目录; 。
代码:
1
2
3
|
$oldumask
= umask(0);
//重置当前权限码
mkdir
(
"/tmp/testing"
,0777);
//创建目录
umask(
$oldumask
);
//恢复当前权限码
|
②rmdir():删除目录,
代码:
1
2
|
rmdir
(
"/temp/testing"
);
或
rmdir
("c:\\tmp\\testing');
|
。
※要删除的目录必须是空目录; 。
4、与文件系统的交互 。
(1)获取文件信息:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
while
((
$file
= readdir(
$dir
)) !== false){
echo
"<a href=\"filedetails.php?file=\'.$file.\'\">"
.
$file
.
"</a><br/>"
;
}
<?php
$current_dir
=
'/uploads/'
;
$file
=
basename
(
$file
);
//获取文件文件名
echo
"<h1>Details of file</h1>"
;
echo
"<h2>File data</h2>"
;
echo
'File last accessed: '
.
date
(
'j F Y H:i'
,
fileatime
(
$file
)).
"<br>"
;
//返回最近访问的时间戳
echo
'File last modifixed: '
.
date
(
'j F Y H:i'
,
filemtime
(
$file
)).
"<br>"
;
//返回最近修改的时间戳
$user
= posix_getpwuid(
fileowner
(
$file
));
//返回用户标识uid
echo
'File owner: '
.
$user
[
'name'
].
"<br/>"
;
$group
= posix_getgrgid(
filegroup
(
$file
));
//返回组织标识gid
echo
'File group: '
.
$group
[
'name'
].
"<br/>"
;
echo
'File permissions: '
.
decoct
(
fileperms
(
$file
)).
"<br/>"
;
//返回8位的权限码
echo
'File type'
.
filetype
(
$file
).
"<br/>"
;
//返回文件类型
echo
'File size'
.
filesize
(
$file
).
"<br/>"
;
//返回文件字节数
echo
"<h2>File Tests</h2>"
;
echo
'is_dir?'
.(
is_dir
(
$file
) ?
'true'
:
'false'
).
"<br/>"
;
echo
'is_executable?'
.(
is_executable
(
$file
) ?
'true'
:
'false'
).
"<br/>"
;
//判断文件是否可执行;
echo
'is_file?'
.(
is_file
(
$file
) ?
'true'
:
'false'
).
"<br/>"
;
echo
'is_link?'
.(
is_link
(
$file
) ?
'true'
:
'false'
).
"<br/>"
;
echo
'is_readable?'
.(
is_readable
(
$file
) ?
'true'
:
'false'
).
"<br/>"
;
echo
'is_writable?'
.(
is_writable
(
$file
) ?
'true'
:
'false'
).
"<br/>"
;
?>
|
(2)更改文件属性 。
chgrp(file,group):修改文件的分组; 。
chmod(file,permissions):修改文件的权限; 。
chown(file,user):修改文件的所有者; 。
(3)创建、删除和移动文件 。
bool touch($filename,[int time,[ int atime]]):创建一个文件(time指定创建时间戳,atime指定可选时间戳) 。
unlink($filename):删除一个文件 。
copy($source_path,$destination_path):复制一个文件 。
rename($oldfile,$newfile):重命名一个文件; 。
(4)使用程序执行函数 。
①String exec(String command[ ,array result [ ,int result_value]]) 。
返回命名结果的最后一行,result变量可以返回字符组数,这些字符串代表输出的每一行,result_value获取返回代码; 。
②void passthru(String command[ ,int result_value]) 。
结果直接输出到浏览器; 。
③String system(string command[ ,int return_value]) 。
输出结果到浏览器,返回命令结果的最后一行或false; 。
※在用户提交的数据包括执行命令的一部分,应该进行以下包装:
system(escapeshellcmd($command)),
5、与环境变量交互 。
phpinfo()函数:获取php的所有变量列表; 。
getenv("$key_name")
setenv("$key_name=$value"),
以上所述是小编给大家介绍的PHP与服务器文件系统的简单交互,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我网站的支持! 。
最后此篇关于PHP与服务器文件系统的简单交互的文章就讲到这里了,如果你想了解更多关于PHP与服务器文件系统的简单交互的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我有这个代码: System.err.print("number of terms = "); System.out.println(allTerms.size()); System.err
我有以下问题:在操作系统是 Linux 的情况下和在操作系统是 MacOs 的情况下,我必须执行不同的操作。 所以我创建了以下 Ant 脚本目标: /u
我正在调用 system("bash ../tools/bashScript\"This is an argument!\"&"),然后我正在调用 close(socketFD) 直接在 system
使用最初生成的随机元素来约束随机数组的连续元素是否有效。 例如:我想生成一组 10 个 addr、size 对来模拟典型的内存分配例程并具有如下类: class abc; rand bit[5:0
我正在创建一个必须使用system(const char*)函数来完成一些“繁重工作”的应用程序,并且我需要能够为用户提供粗略的进度百分比。例如,如果操作系统正在为您移动文件,它会为您提供一个进度条,
我即将编写一些项目经理、开发人员和业务分析师会使用的标准/指南和模板。目标是更好地理解正在开发或已经开发的解决方案。 其中一部分是提供有关记录解决方案的标准/指南。例如。记录解决/满足业务案例/用户需
在开发使用压缩磁盘索引或磁盘文件的应用程序时,其中部分索引或文件被重复访问(为了论证,让我们说一些类似于 Zipfian 分布的东西),我想知道什么时候足够/更好地依赖操作系统级缓存(例如,Debia
我们编写了一个 powershell 脚本,用于处理来自内部系统的图像并将其发送到另一个系统。现在,业务的另一部分希望加入其中,对数据进行自己的处理,并将其推送到另一个系统。打听了一下,公司周围有几个
我正在尝试朗姆酒我的应用程序,但我收到以下错误:System.Web.HttpUnhandledException:引发了“System.Web.HttpUnhandledException”类型的异
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
所以我在其他程序中没有收到此错误,但我在这个程序中收到了它。 这个程序是一个我没有收到错误的示例。 #include int main() { system("pause"); } // en
我在 c# System.URI.FormatExption 中遇到问题 为了清楚起见,我使用的是 Segseuil 的 Matlab 方法,并且它返回一个图片路径 result。我想为其他用户保存此
我正在尝试像这样设置文本框的背景色: txtCompanyName.BackColor = Drawing.Color.WhiteSmoke; 它不喜欢它,因为它要我在前面添加系统,例如: txtCo
请帮助我解决 System.StackOverflowException我想用 .aspx 将记录写入数据库我使用 4 层架构来实现这一切都正常但是当我编译页面然后它显示要插入数据的字段时,当我将数据
我使用了一些通常由系统调用的API。 因此,我将 android:sharedUserId="android.uid.system" 添加到 manifest.xml, 并使用来自 GIT 的 And
我正在尝试创建一个小型应用程序,它需要对/system 文件夹进行读/写访问(它正在尝试删除一个文件,并创建一个新文件来代替它)。我可以使用 adb 毫无问题地重新挂载该文件夹,如果我这样做,我的应用
我想从没有 su 的系统 priv-app 将/system 重新挂载为 RW。如何以编程方式执行此操作?只会用 Runtime.getruntime().exec() 执行一个 shell 命令吗
我正在尝试制作一个带有登录系统的程序我对此很陌生,但我已经连续工作 8 个小时试图解决这个问题。这是我得到的错误代码 + ServerVersion 'con.ServerVersion' threw
当我“构建并运行”Code::Blocks 中的程序时,它运行得非常好!但是当我从“/bin”文件夹手动运行它时,当它试图用 system() 调用“temp.bat”时,它会重置。这是为什么?它没有
我想使用 system/pipe 命令来执行具有特殊字符的命令。下面是示例代码。通过系统/管道执行命令后,它通过改变特殊字符来改变命令。我很惊讶地看到系统命令正在更改作为命令传递的文本。 run(ch
我是一名优秀的程序员,十分优秀!