喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

[北京]代朋友公司招聘PHP高级程序员多名

上一主题 下一主题
     
标题: [原创] 用Delphi程序更新PHP网站-初级篇  
 
Zerolone
新手上路
Rank: 1
初级会员



UID 67622
精华 0
积分 7
帖子 5
金钱 7 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2005-12-30
状态 离线
用Delphi程序更新PHP网站-初级篇

用Delphi程序更新PHP网站-初级篇

一、采用的软件环境:
OS:Microsoft Windows 2000 Server 5.0.2195 Service Pack 4 内部版本号 2195
IE:6.0.2800.1106
Delphi :Version 6.0 (Build 6.240) Update Pack 2
Indy:9.0.4 beta
PHP:4.4.2
Apache:2.0.55
Serv-U:6.3.0.0
说明:
1、OS与IE版本信息由开始-〉程序-〉附件-〉系统工具-〉系统信息获得
2、Delphi版本信息由Delphi-〉Help-〉About获得
3、PHP版本信息由PHP函数phpinfo()获得
4、Apache版本由apache -v 获得
5、Indy为Delphi控件包,这里主要用到的是其Ftp控件

三、续篇
中级篇:采用ZeosLib控件进行Mysql数据库编程
高级篇:编写文章管理程序,支持Delphi程序与PHP程序同时使用。

四、实现方法
作为初级篇,就不牵扯数据库(中级篇中介绍)。只实现一个最简单的应用, 更新网站标题、网站关键字、网站备案信息这三个信息。采用FTP进行更新储存网站标题、网站关键字、网站备案信息的变量文件data/info.php文件

五、文件说明
data/info.php 网站变量文件
index.php 网站首页
index.php.php 网站模版

完整文档下载地址:http://cnc.zerolone.com/1.zip

代码+indy控件打包下载地址:http://cnc.zerolone.com/1.rar
代码+indy控件+apache+php+serv-U打包下载地址:http://cnc.zerolone.com/2.rar

运行演示,采用SDemo2录制:
exe格式 http://cnc.zerolone.com/1.exe
smv格式 http://cnc.zerolone.com/1.smv

我的联系方式:
zerolone@163.com
16198008

六、开始
建立两个文件index.php.php与index.php
index.php.php 写主要的html代码
index.php 写代码

index.php.php类似如下(完整版本请察看index.php.php):

<html>
<head>
<title><?=$site['title']?></title>
<meta name="description" content="<?=$site['keyWords']?>" />
<meta name="keywords" content="<?=$site['description']?>" />
</head>
<body>
<!-- 网站头 -->
<div><span><?=$site['title']?></span><?=$site['description']?></div>
<!-- 网站结束 -->
<div><a href="http://www.miibeian.gov.cn" target="_blank"><?=$site['cert']?></a>&copy;2006</div>
</body>
</html>
index.php代码如下:

<?php
//读取变量
require('data/info.php');

//读取文件
require('index.php.php');
?>
很简单的调用。

显示效果如下图:

下面我们用Delphi来制作更新网站标题、网站关键字、网站备案信息部分。

我们先看一下完整版本最终的效果,我们当前要做的就是设置这一块。如图1-1




图1-1

那么, 我们开始了。 启动Delphi,新建一个Application。

加入2个按钮,如图1-2。



图1-2

一个按钮为本地, 一个按钮为设置,如图1-3



图1-3

然后建立两个Form,分别取名为:SiteSettingForm与ClientSettingForm。

其中ClientSettingForm的控件如图1-4所示。

图1-4

SiteSettingForm的控件如图1-5所示

图1-5

首先我们来处理ftp连接问题。我已经在系统中安装了Serv-U,设置IP:127.0.0.1 用户名123456 密码123456。

再ClientSettingForm的FormCreate事件中添加读取ini文件代码, 读取上次保持的ini文件, 如果是第一次运行,则不能读取, 需要进行设置。

FromCreate代码如下:

<?php
procedure TClientSettingForm
.FormCreate(SenderTObject);
begin
  
//读取ini
  
try
    
Edt_IP.Text := GetIni('IP');
    
Edt_User.Text := GetIni('User');
    
Edt_Password.Text := GetIni('Password');
    
Edt_CacheFolder.Text := GetIni('CacheFolder');

  
except
    MessageBox
(0'读取配置文件 setting.ini 失败!'pchar(caption), MB_OK +
      
MB_ICONEXCLAMATION);
  
end;

  
//FTP默认设置
  
BitBtn_EditFtp.Enabled := false;
  
//  DirectoryListBox1.Visible := false;

  
if IdFtp1.Connected then
    Btn_Connect
.Enabled := false
  
else
    
Btn_DisConnect.Enabled := false
end
;
?>
写完读取ini代码, 接下来编写测试连接的代码,Btn_Connect的onClick事件,读取TextBox里面的ip,用户名,密码设置,尝试连接ftp服务器,返回连接信息。代码如下

<?php
procedure TClientSettingForm
.Btn_ConnectClick(SenderTObject);
begin
  
if IdFtp1.Connected then
  
else
    
with IdFTP1 do
      try
        
User := Edt_User.Text;
        
Password := Edt_Password.Text;
        
Host := Edt_IP.Text;
        
TransferType := ftBinary;
        
Connect;
        
Btn_DisConnect.Enabled := true;
        
Btn_Connect.Enabled := false;
      
except
        MessageBox
(0'Ftp服务器连接失败!''连接失败'MB_OK +  MB_ICONEXCLAMATION);
      
end;
end;
?>
下面是断开ftp服务器代码:

<?php
procedure TClientSettingForm
.Btn_DisConnectClick(SenderTObject);
begin
  
try
    
IdFtp1.Disconnect;
    
Btn_DisConnect.Enabled := false;
    
Btn_Connect.Enabled := true;
  
except
  end
;
end;
?>
下面编写选择ftp缓存目录代码,缓存的优点在于不必每次读取服务器的设置, 只要修改好本地文件的设置, 直接上传直服务器。

<?php
procedure TClientSettingForm
.Btn_SelectDirClick(SenderTObject);
begin
  
try
    
Edt_CacheFolder.Text := BrowseDir(handle'浏览文件夹'Edt_CacheFolder.Text);
  
except
  end
;
end;
?>
BrowseDir函数为自定义函数,在文件ClientFunction.pas文件中

ftp连接测试无误后就可以点击保存按钮, 保存ftp设置。保存代码如下:

<?php
procedure TClientSettingForm
.BitBtn_EditFtpClick(SenderTObject);
begin
  
try
    
SaveIni(Edt_IP.Text'IP');
    
SaveIni(Edt_User.Text'User');
    
SaveIni(Edt_Password.Text'Password');
    
SaveIni(Edt_CacheFolder.Text'CacheFolder');
    
MessageBox(0'保存成功!'pchar(caption), MB_OK +
      
MB_ICONEXCLAMATION);
    
BitBtn_EditFtp.Enabled := false
  except
    MessageBox
(0'保存失败!请检查文件 setting.ini 是否可写'pchar(caption),
      
MB_OK +
      
MB_ICONEXCLAMATION);
    
BitBtn_EditFtp.Enabled := True;
  
end;
end;
?>
我们运行程序测试一下:


图1-6错误的参数


图1-7正确的参数

然后我们到SiteSettingForm窗口。首先编写读取文件代码,读取ftp服务器上的文件,即为网站变量文件,如果本地存在该文件, 提示是否覆盖, 如果不存在则直接获取。

<?php
procedure TSiteSettingForm
.Btn_ReadClick(SenderTObject);
var
  
ClientFilestring;
begin
  with ClientSettingForm 
do
    
begin
      ClientFile 
:= Edt_CacheFolder.Text 'info.php';
      
Edit1.Text := ClientFile;

      
Btn_Connect.Click;
      try
        if 
FileExists(ClientFilethen
          begin
            
if MessageBox(handle'文件已经存在,是否覆盖?'pchar(caption),
              
mb_IconInformation mb_YesNo) = mrYes then
              begin
                IdFtp1
.Get('data/info.php',
                  
Edt_CacheFolder.Text 'info.php'true);
              
end;
          
end
        
else
          
IdFtp1.Get('data/info.php',
            
Edt_CacheFolder.Text 'info.php'true);

        
Memo1.Lines.Clear;
        
Memo1.Lines.LoadFromFile(Edt_CacheFolder.Text 'info.php');
      
except
        showmessage
('连接服务器失败,请检查本地设置!');
      
end
    end
;
end;
?>
获取服务器文件成功后读取文件内容,依次写入各个TextBox,代码如下:

<?php
procedure TSiteSettingForm
.Button1Click(SenderTObject);
var
  
iInteger;
  
FTextFile;
  
Sstring;
  
thestringstring;

begin
  begin
    AssignFile
(FEdit1.Text); { File selected in dialog }
    
Reset(F);

    
//标题
    
for := 1 to 3 do
      
Readln(FS);
    
Edt_Sitename.Text := S;

    
//关键字
    
for := 1 to 3 do
      
Readln(FS);
    
Edt_Keyword.Text := S;

    for 
:= 1 to 3 do
      
Readln(FS);
    
Edt_site_description.Text := S;

    for 
:= 1 to 3 do
      
Readln(FS);
    
Edt_site_cert.Text := S;
    
thestring := S;
    
CloseFile(F);
  
end;
end;
[
php]

进行修改之后,写入文件然后再上传,即完成所有代码的编写。

[php]
procedure TSiteSettingForm.Button2Click(SenderTObject);
var
  
iinteger;
begin
  Memo2
.Clear;
  for 
:= 1 to Memo1.Lines.Count do
    
begin
      
if 3 then
        Memo2
.Lines.Add(Edt_Sitename.Text)
      else if 
6 then
        Memo2
.Lines.Add(Edt_Keyword.Text)
      else if 
9 then
        Memo2
.Lines.Add(Edt_site_description.Text)
      else if 
12 then
        Memo2
.Lines.Add(Edt_site_cert.Text)
      else
        
Memo2.Lines.Add(Memo1.Lines.Strings[1]);
    
end;
  
Memo2.Lines.SaveToFile(Edit1.Text);
end;

procedure TSiteSettingForm.Button3Click(SenderTObject);
begin
  with ClientSettingForm 
do
    
begin
      Btn_Connect
.Click;
      try
        
IdFTP1.Put(Edit1.Text'data/info.php'false);
        
showmessage('更新成功!');
      
except
        showmessage
('上传错误!');
      
end;
    
end;
end;
?>
最终显示结果抓图:


2006-10-6 04:52 PM#1
查看资料  Blog  发短消息  顶部
 
Zerolone
新手上路
Rank: 1
初级会员



UID 67622
精华 0
积分 7
帖子 5
金钱 7 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2005-12-30
状态 离线
[推荐阅读] 如何给注册会员群发邮件呢?谢谢~
第一次发贴,请大家批
2006-10-6 04:55 PM#2
查看资料  Blog  发短消息  顶部
 
fcicq
新手上路
Rank: 1
初级会员



UID 24467
精华 0
积分 21
帖子 587
金钱 20 喜悦币
威望 0
人脉 1
阅读权限 10
注册 2003-11-8
来自 fcicq.net
状态 离线
[推荐阅读] 有关数据库SQL字符串的问题,巨奇怪!!
晕,弄半天还是控件.
===
偶想到的本来是远程一个php文件,处理这种上传请求...





2006-10-6 08:03 PM#3
查看资料  访问主页  Blog  发短消息  顶部
 
qh663
版主
Rank: 7Rank: 7Rank: 7
中级会员


UID 30020
精华 0
积分 546
帖子 580
金钱 546 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2004-7-13
来自 河源
状态 离线
[推荐阅读] 构造成为函数后功能失效了
原创区不时有点新鲜的技巧出来,支持一下。



五百多篇PHP学习资料
喜悦村BLOG
php团队接兼职项目QQ:80031807
PHP群:768844
2006-10-6 10:34 PM#4
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
游戏人间
版主
Rank: 7Rank: 7Rank: 7
☞风云山庄大少爷☜


UID 62639
精华 2
积分 14494
帖子 7416
金钱 14347 喜悦币
威望 20
人脉 127
阅读权限 100
注册 2004-12-21
来自 广西人在北京
状态 在线
[推荐阅读] 使用mail函数如何让发信人那显示自己的地址
Delphi,呵呵,好东西。



 
群号:6025396/6025252/19520091(广西PHP交流/PHP高级编程/算法交流) 寧可在嘗試中失敗,也不在保守中成功! 不為失敗找理由,只為成功找方法! 饿踢Blog
 
2006-10-7 08:30 PM#5
查看资料  访问主页  Blog  发短消息  顶部
 
tcbxh2008
新手上路
Rank: 1



UID 80059
精华 0
积分 2
帖子 43
金钱 2 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2006-9-14
状态 离线
[推荐阅读] 大于2M的数据如何导入?
很多图片都不显示了
2006-10-8 05:59 AM#6
查看资料  发短消息  顶部
 
wenzi200869
新手上路
Rank: 1



UID 80992
精华 0
积分 5
帖子 5
金钱 5 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2006-10-4
状态 离线
[推荐阅读] php5编译问题!!!!
收藏一下!
2006-10-8 07:51 AM#7
查看资料  发短消息  顶部
 
shoujipeixun
乞丐




UID 80702
精华 0
积分 -4
帖子 14
金钱 -4 喜悦币
威望 0
人脉 0
阅读权限 1
注册 2006-9-28
状态 离线
[推荐阅读] 怪事
顶上去!!!!!!
2006-10-9 05:29 PM#8
查看资料  发短消息  顶部
 
hoping
新手上路
Rank: 1
初级会员



UID 63716
精华 0
积分 8
帖子 10
金钱 8 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2005-3-25
状态 离线
[推荐阅读] 【郑州】招募PHP程序员
这两天原因工作的原因,正对Delphi感兴趣,看看,学学新东东
2006-10-9 11:43 PM#9
查看资料  访问主页  发短消息  顶部
 
hasphp
新手上路
Rank: 1



UID 78404
精华 0
积分 1
帖子 16
金钱 1 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2006-8-16
状态 离线
[推荐阅读] sql语句问题
支持一下了
2006-10-10 10:02 AM#10
查看资料  发短消息  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.038396 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP