美文网首页我爱编程
[iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码

[iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码

作者: 小枫123 | 来源:发表于2018-04-08 11:20 被阅读171次

    本文可能会有错误, 或者不足的地方, 还请多多指正, 多多提宝贵意见!!!

    在网上找了好多PHP端接收客户端发送的数据和文件的代码, 然后今天总结一下

    首先在本地利用XAMPP(集成服务器开发安装包)ps: 很傻瓜, 一直下一步就可以了, 也特别强大!

    然后编写PHP代码, 接收客户端iOS的请求, 进行相应处理! (实现一下前台和后台交互的全过程) 啊, 都由你自己来, 会发现好累!!! 废话不多说, 开始吧!

    一. 安装本地服务器(XAMPP)

    注意, 一定要使用我这个XAMPP安装包 (不然我的php文件里用的是php3的函数, 而百度下的最新的XAMPP里面集成的是php5的, 可能会出现问题)

    给一个MAC版XAMPP安装包, 给种一枚!http://pan.baidu.com/s/1gecDFAb

    双击运行.dmg安装包

    双击

    遇到错误请参考:http://www.cnblogs.com/lidongxu/p/5256351.html

    等待是短暂的!!!

    // ps: 这个网页你可以在地址栏输入localhost 或者 127.0.0.1 可以访问!

    到此, 我们的XAMPP安装就基本完成了. 大家可以打开 Launchpad 看到XAMPP

    在应用程序里, 找到XAMPP文件夹, 也可以看到XAMPP安装的东西,  manager-osx 是启动图标, 而uninstall是 反安装程序, 也就是运行它用于卸载(记住)

    大家可以切换上面的上面的上面图片这个软件 标签到 -> Manage Servers 上, 确保3个选项都是Running 的状态, 直接点击Start All (当你要使用XAMPP的时候)

    要确保都是Running的状态!

    二. 配置MySql

    在上面我们讲了 如何安装XAMPP

    , 利用Apache软件把我们的电脑变成一个Web 服务器, 当然了别忘了启动那几个服务, 然后让这个软件一直开着的状态, 不要退出!(最小化就好了嘛!)

    输入 localhost  或者 127.0.0.1 打开本地服务器, 然后点击右上角的, phpMyAdmin,

    如果遇到错误请参考http://www.cnblogs.com/lidongxu/p/5256351.html

    然后进入到这个页面: 添加新的数据库

    然后输入数据库名字 , 然后点击创建

    之后, 输入第一张表的名字,  (我这里输入Login)

    然后添加字段, 比如我这里添加(userName  text类型,  password  text类型), 然后点击右下角. 保存按钮.

    这样我们的数据库以及表和字段基本就建立完毕!!!

    三.然后呢, 今天我们就来接触下PHP开发语言

    首先呢, 需要在我们本机服务器文件夹资源下新建个.php文件,  废话嘛(你要写php啦!)

    在register.php 输入以下代码

    然后呢, 今天我们就来接触下PHP开发语言

    首先呢, 需要在我们本机服务器文件夹资源下新建个.php文件,  废话嘛(你要写php啦!)

    在register.php 输入以下代码

    复制下面这段代码

    $nameP = $_POST['name2'];

    $passP = $_POST['pass2'];

    $ageP = $_POST['age2'];

    $telephoneP = $_POST['telephone2'];

    // 2. 建立数据库连接 (127.0.0.1 数据库所在的ip地址)

    // root 是数据库用户名(默认的)

    // "" 密码(默认是空)

    $con = mysql_connect("127.0.0.1", "root", "");

    $myCon = mysql_select_db("lidongxu", $con);

    // 3. 先查询, 如果存在就不要在插入了

    $select = "select userName from User where userName = '$nameP'";

    $seleResult = mysql_query($select);

    // 4. 如果查到了, 说明已经存在这个用户了, 则返回-1给客户端代表已经注册过了

    if (mysql_num_rows($seleResult)) {

    // success 就是key值 对应的value 就是后面的字符串

    $a = array();

    $a['success'] = "-1";

    $a['status'] = "have";

    $arr = json_encode($a);

    echo $arr;

    }

    // 5. 如果没注册过, 那么

    else {

    // 6. 把数据都插入到mysql数据库中

    $sql = "insert into User values('$nameP', '$passP', '$ageP', '$telephoneP')";

    $result = mysql_query($sql);

    if ($result == 1) { // 7. 代表执行成功

    $a=array();$a['success'] ="1";$a['status'] ="ok";$arr= json_encode($a);echo$arr;

    }

    else { // 8. 代表插入失败

    $a=array();$a['success'] ="0";$a['status'] ="no";$arr= json_encode($a);echo$arr;

    }

    }

    // 9. 接收用户头像图片

    // 9.1. 接收图片传到服务器上默认的临时文件路径以及名字 (uploadfile 给前台使用的

    // 字段)

    $url = $_FILES["uploadimageFile"]["tmp_name"];

    // 9.2 获取根路径下的downloads文件夹下的路径(download2 需要手动

    // 去本地创建)

    $destination_folder = $_SERVER['DOCUMENT_ROOT'].'/download2/';

    // 9.3拼接要作为服务器上保存的文件名字

    $newfname = $destination_folder .(string)$nameP.'.jpg'; //set your file ext

    // 打开连接  rb+ 读写打开一个二进制文件,允许读写数据,文件必须存在。

    // 获取客户端上传到缓存文件夹下的文件

    $file = fopen ($url, "rb");

    if ($file) {

    // a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。

    // 获取要把客户端传递过来的文件复制到新的文件夹下的名字

    $newf = fopen ($newfname, "a");

    if ($newf)

    // 检查文件是否结束,如结束,则返回非零值

    while(!feof($file)) {

    // 开始从某个文件读取1MB 然后写入到新的路径1MBfwrite($newf, fread($file,1024*8),1024*8);

    }

    }

    if ($file) {

    // 关闭文件链接

    fclose($file);

    }

    if ($newf) {

    fclose($newf);

    }

    ?>

    复制代码结束

    然后在本地服务器文件夹下新建download2文件夹

    Paste_Image.png

    然后再把登录的php代码也写了吧!在htdocs文件夹下, 新建loginGet.php文件 然后插入代码

    复制代码开始

    // 1. 获取GET网络请求网址里的key值对应的value

    // 声明变量name1 和pass1 接收

    $name1 = $_GET['name'];

    $pass1 = $_GET['pass'];

    // 2. 建立数据库连接

    // 参数1: 数据库所在的服务器的地址(本机127.0.0.1或者localhost)

    // 参数2: MySql数据库的账户(默认root)

    // 参数3: MySql数据库的密码(默认无)

    $con = mysql_connect("127.0.0.1", "root", "");

    // 参数1: 自己建立的数据库的名字

    $myCon = mysql_select_db("lidongxu", $con);

    // 3. 执行查询 (利用用户名和密码进行匹配查找, 如果找到了随意返回userName(用户名))

    $sql = "select * from User where userName = '$name1' And password = '$pass1'";

    // 4. 接收结果

    $result = mysql_query($sql);

    // 4.2 如果查询结果为空的话

    if(mysql_num_rows($result) == 0) {

    $a = array();

    $a['success'] = "0";

    $a['name'] = "null";

    $a['status'] = "no";

    $arr = json_encode($a);

    echo $arr;

    }

    else {

    // 5. 取出本条记录

    $row = mysql_fetch_row($result);

    $a = array();

    $a['success'] = "1";

    $a['name'] = $row[0];

    $a['age'] = $row[2];

    $a['telephone'] = $row[3];

    $a['status'] = "ok";

    $arr = json_encode($a);

    echo $arr;

    }

    ?>

    代码复制结束

    到此, php暂时告一段路, 然后进行iOS段代码开发(开心不???)

    四.然后, 那么我们来看看iOS端代码如何实现.

    ViewContrller.m (主要类) 可能里面用到了自己定义的类LoginView  请去GitHubhttps://github.com/lidongxuwork/iOS-to-PHP上下载源代码(顺路给个星哈, 谢谢!!!)

    //  ViewController.m

    //  php

    //

    //  Created by 李东旭 on 16/2/25.

    //  Copyright © 2016年 李东旭. All rights reserved.

    //

    #import "ViewController.h"

    #import "MainViewController.h"

    #import "Define.h"

    @interface ViewController ()

    @property (nonatomic, strong) LoginViewloginR;

    @end

    @implementation ViewController

    -(void)viewDidLoad {

    [super viewDidLoad];

    #warning 1. 创建登录注册页面

    // 登录注册类调用

    self.loginR = [[LoginView alloc] initWithFrame:self.view.frame];

    #warning 2. 签代理 代理方法可以拿到登录信息和注册信息

    _loginR.delegate = self;

    [self.view addSubview:_loginR];

    }

    #pragma mark - LoginView delegate

    #warning 3. 根据不同的后台给的字段 代表的意思 以及值进行不同处理

    - (void)getLoginName:(NSString)name pass:(NSString)pass

    {

    // 调用登录验证接口 (这里用get网络请求的方式, 和post网络请求的方式)

    NSStringurl = @"http://127.0.0.1/loginGet.php";

    // 后台规定登录用户名的字段必须是name密码的pass

    NSDictionarydic = @{@"name":name, @"pass":pass};

    // 网络请求有点特殊 点进去看

    [LDXNetWork GetThePHPWithURL:url par:dic success:^(id responseObject) {

    // 后台返回的字典里 如果success对应的value是1代表登录成功

    if ([responseObject[@"success"] isEqualToString:@"1"]) {

    MainViewControllermainVC = [[MainViewController alloc] init];

    mainVC.dic = responseObject;

    [self presentViewController:mainVC animated:YES completion:nil];

    }

    else {

    [self showTheAlertView:self andAfterDissmiss:1.0 title:@"账号或密码错误" message:@""];

    }

    } error:^(NSErrorerror) {

    NSLog(@"%@", error);

    }];

    }

    - (void)getRegisterName:(NSString)name pass:(NSString)pass age:(NSString)age telephone:(NSString)telephone image:(UIImage)image

    {

    NSStringurl = @"http://127.0.0.1/register.php";

    NSDictionarydic = @{@"name2":name, @"pass2":pass, @"age2":age, @"telephone2":telephone};

    // 网络请求有点特殊点进去看 (@"uploadimageFile" 后台给的字段)

    [LDXNetWork PostThePHPWithURL:url par:dic image:image uploadName:@"uploadimageFile" success:^(id response) {

    NSStringsuccess = response[@"success"];

    if ([success isEqualToString:@"1"]) {

    // 代表注册成功

    [self showTheAlertView:self andAfterDissmiss:1.5 title:@"注册成功" message:@""];

    // 跳转回到登录界面

    [_loginR goToLoginView];

    }

    else if([success isEqualToString:@"-1"]){

    [self showTheAlertView:self andAfterDissmiss:1.5 title:@"账号已经被注册了" message:@""];

    }

    } error:^(NSErrorerror) {

    NSLog(@"%@", error);

    }];

    }

    - (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

    }

    @end

    MainViewController.h  登录到的界面

    //

    //  MainViewController.h

    //  php

    //

    //  Created by 李东旭 on 16/3/11.

    //  Copyright © 2016年 李东旭. All rights reserved.

    //

    #import

    @interface MainViewController : UIViewController

    @property (nonatomic, strong) NSDictionary *dic;

    @end

    MainViewController.m

    //

    //  MainViewController.m

    //  php

    //

    //  Created by 李东旭 on 16/3/11.

    //  Copyright © 2016年 李东旭. All rights reserved.

    //

    #import "MainViewController.h"

    @interface MainViewController ()

    @end

    @implementation MainViewController

    - (void)viewDidLoad {

    [super viewDidLoad];

    self.view.backgroundColor = [UIColor whiteColor];

    UIImageViewimageV = [[UIImageView alloc] initWithFrame:CGRectMake(50, 100, 200, 200)];

    imageV.backgroundColor = [UIColor greenColor];

    // 取出用户名对应的头部图片

    NSStringimageValue = self.dic[@"name"];

    #warning 5. 直接在这里进行网址路径拼接, 因为不同用户要取不同的头像图片, 图片都保存在服务器的一个叫download2文件夹, 里面图片是根据用户名加.jpg来获取的

    NSStringurl = [NSString stringWithFormat:@"%@/%@.jpg", @"http://127.0.0.1/download2", imageValue];

    // 同步加载图片

    NSDatadata = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];

    UIImageimage = [UIImage imageWithData:data];

    [imageV setImage:image];

    [self.view addSubview:imageV];

    // 循环创建label, 从请求下来传过来的字典里, 拿出指定的字段的value值显示

    NSArrayarr = @[@"name", @"age", @"telephone"];

    for (int i = 0; i < 3; i++) {

    CGFloat offY = 320;

    UILabellabel = [[UILabel alloc] initWithFrame:CGRectMake(50, 320 + i50, 250, 40)];

    [self.view addSubview:label];

    NSStrings = arr[i];

    NSStringvalue = self.dic[s];

    label.text = [NSString stringWithFormat:@"%@: %@", s, value];

    }

    }

    - (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

    }

    @end

    注意: 你可能运行的时候, 遇到这个问题 failed to open stream: No such file or directory

    解决方法: 在本地服务器路径文件夹下建立文件夹 download2

    错误2:

    没有权限 我们就给权限被 哈哈哈哈

    然后回车 就可以啦.  然后回到Xcode 重新运行应该就没问题啦!!

    本文可能会有错误, 或者不足的地方, 还请多多指正, 多多提宝贵意见!!!

    以上文件, 以及项目代码, 都在这里  看过来->  (顺路给个星哦~~~)

    iOS端

    https://github.com/lidongxuwork/iOS-to-PHP

    PHP端

    https://github.com/lidongxuwork/Register-Login-PHP


    相关文章

      网友评论

        本文标题:[iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码

        本文链接:https://www.haomeiwen.com/subject/fybodttx.html