demo跨平台开发PHP学习

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

2016-03-12  本文已影响3994人  程序猿_老李

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

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


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


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


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

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

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

  1. 双击运行.dmg安装包


  2. 双击


遇到错误请参考: 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开发语言

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


  2. 在register.php 输入以下代码
    然后呢, 今天我们就来接触下PHP开发语言

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

  4. 在register.php 输入以下代码
    复制下面这段代码
    <pre><?php // 1. 获取客户端利用post方式网络请求的body里的字段对应的value (这个字段// 是这里规定的, 前端必须遵守这个name2, pass2等key值)
    $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 然后写入到新的路径1MB
    fwrite($newf, fread($file, 1024 * 8 ), 1024 * 8 );
    }
    }
    if ($file) {
    // 关闭文件链接
    fclose($file);
    }
    if ($newf) {
    fclose($newf);
    }
    ?></pre>
    复制代码结束

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

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

复制代码开始
<pre>
<?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;
}
?></pre>

代码复制结束

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

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

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

<pre>
// 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 () <LoginRegisterDelegate>
@property (nonatomic, strong) LoginView *loginR;
@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. 根据不同的后台给的字段 代表的意思 以及值进行不同处理

MainViewController.h 登录到的界面
<pre>
//
// MainViewController.h
// php
//
// Created by 李东旭 on 16/3/11.
// Copyright © 2016年 李东旭. All rights reserved.
//

import <UIKit/UIKit.h>

@interface MainViewController : UIViewController
@property (nonatomic, strong) NSDictionary *dic;
@end
</pre>

MainViewController.m
<pre>
//
// MainViewController.m
// php
//
// Created by 李东旭 on 16/3/11.
// Copyright © 2016年 李东旭. All rights reserved.
//

import "MainViewController.h"

@interface MainViewController ()
@end
@implementation MainViewController

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

NSString *url = [NSString stringWithFormat:@"%@/%@.jpg", @"http://127.0.0.1/download2", imageValue];
// 同步加载图片
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
UIImage *image = [UIImage imageWithData:data];
[imageV setImage:image];
[self.view addSubview:imageV];
// 循环创建label, 从请求下来传过来的字典里, 拿出指定的字段的value值显示
NSArray *arr = @[@"name", @"age", @"telephone"];
for (int i = 0; i < 3; i++) {
    CGFloat offY = 320;
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, 320 + i * 50, 250, 40)];
    [self.view addSubview:label];
    NSString *s = arr[i];
    NSString *value = self.dic[s];
    label.text = [NSString stringWithFormat:@"%@: %@", s, value];
}

}

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


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



    错误2:



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


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

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

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

iOS端
https://github.com/lidongxuwork/iOS-to-PHP
PHP端
https://github.com/lidongxuwork/Register-Login-PHP

1.gif
上一篇 下一篇

猜你喜欢

热点阅读