美文网首页demo跨平台开发PHP学习
[iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码

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

作者: 程序猿_老李 | 来源:发表于2016-03-12 01:00 被阅读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. 根据不同的后台给的字段 代表的意思 以及值进行不同处理

    • (void)getLoginName:(NSString *)name pass:(NSString *)pass
      {
      // 调用登录验证接口 (这里用get网络请求的方式, 和post网络请求的方式)
      NSString *url = @"http://127.0.0.1/loginGet.php";
      // 后台规定登录用户名的字段必须是name密码的pass
      NSDictionary *dic = @{@"name":name, @"pass":pass};
      // 网络请求有点特殊 点进去看
      [LDXNetWork GetThePHPWithURL:url par:dic success:^(id responseObject) {
      // 后台返回的字典里 如果success对应的value是1代表登录成功
      if ([responseObject[@"success"] isEqualToString:@"1"]) {
      MainViewController *mainVC = [[MainViewController alloc] init];
      mainVC.dic = responseObject;
      [self presentViewController:mainVC animated:YES completion:nil];
      }
      else {
      [self showTheAlertView:self andAfterDissmiss:1.0 title:@"账号或密码错误" message:@""];
      }
      } error:^(NSError *error) {
      NSLog(@"%@", error);
      }];
      }
    • (void)getRegisterName:(NSString *)name pass:(NSString *)pass age:(NSString *)age telephone:(NSString *)telephone image:(UIImage *)image
      {
      NSString *url = @"http://127.0.0.1/register.php";
      NSDictionary *dic = @{@"name2":name, @"pass2":pass, @"age2":age, @"telephone2":telephone};
      // 网络请求有点特殊点进去看 (@"uploadimageFile" 后台给的字段)
      [LDXNetWork PostThePHPWithURL:url par:dic image:image uploadName:@"uploadimageFile" success:^(id response) {
      NSString *success = 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:^(NSError *error) {
      NSLog(@"%@", error);
      }];
      }
    • (void)didReceiveMemoryWarning {
      [super didReceiveMemoryWarning];
      // Dispose of any resources that can be recreated.
      }
      @end
      </pre>

    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

    • (void)viewDidLoad {
      [super viewDidLoad];
      self.view.backgroundColor = [UIColor whiteColor];
      UIImageView *imageV = [[UIImageView alloc] initWithFrame:CGRectMake(50, 100, 200, 200)];
      imageV.backgroundColor = [UIColor greenColor];
      // 取出用户名对应的头部图片
      NSString *imageValue = self.dic[@"name"];

    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];
    }
    

    }

    • (void)didReceiveMemoryWarning {
      [super didReceiveMemoryWarning];
      // Dispose of any resources that can be recreated.
      }
      @end
      </pre>

    注意: 你可能运行的时候, 遇到这个问题 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

    相关文章

      网友评论

      • Hello_kid:找了好几天 终于找到一份满意的,我想问下 我在windows 搭建服务器 在Mac下请求访问可以吗?在同一个无线里
      • cae1021f4938:您好!
        $_FILES 一直获取不到,这个问题怎么解决呢?
        一直为空
        程序猿_老李:@丿愛護丶v小白楊 说明前端没传过来
      • c94708ca8927:您好旭哥 请问我点 真机调试的 时候出现这个错误是什么情况?真机调试不能连接服务器还是我代码打错了0 0?Error Domain=NSURLErrorDomain Code=-1004 "Could not connect to the server." UserInfo={NSUnderlyingError=0x17424b400 {Error Domain=kCFErrorDomainCFNetwork Code=-1004 "(null)" UserInfo={_kCFStreamErrorCodeKey=61, _kCFStreamErrorDomainKey=1}}, NSErrorFailingURLStringKey=http://127.0.0.1/loginGet.php?name=1&pass=1, NSErrorFailingURLKey=http://127.0.0.1/loginGet.php?name=1&pass=1, _kCFStreamErrorDomainKey=1, _kCFStreamErrorCodeKey=61, NSLocalizedDescription=Could not connect to the server.}
        c94708ca8927:@M_Lee 噢噢~谢谢 解决了!
        程序猿_老李:@xujunan 127.0.0.1 指向的是你电脑作为一个服务器的地址. 如果你要用手机访问, 需要手机和电脑连接同一个wifi 然后把127.0.0.1 换成你电脑的局域网的ip地址. xampp就是在你电脑上搭建一个服务器服务.
        c94708ca8927:@xujunan 但是我在电脑上模拟运行却可以
      • 云画的跃光:我想请问下,如果我不自己创建数据库,用别人已经写好的数据库可以吗?
        云画的跃光:@云画的跃光 可以连接sql server数据库吗?
        云画的跃光:@M_Lee 谢谢 :smile:
        程序猿_老李:@云画的跃光 可以但是请注意数据库地址,账号。密码,以及数据库名,表名以及字段名要和数据库对上!
      • c7af9161c6f3:希望旭哥能幫忙看一下,看不太懂還請賜教:
        2016-10-09 19:06:51.535 php[38067:210051] Error Domain=NSURLErrorDomain Code=-1004 "Could not connect to the server." UserInfo={NSUnderlyingError=0x7faf6c165ce0 {Error Domain=kCFErrorDomainCFNetwork Code=-1004 "(null)" UserInfo={_kCFStreamErrorCodeKey=61, _kCFStreamErrorDomainKey=1}}, NSErrorFailingURLStringKey=http://localhost/register.php, NSErrorFailingURLKey=http://localhost/register.php, _kCFStreamErrorDomainKey=1, _kCFStreamErrorCodeKey=61, NSLocalizedDescription=Could not connect to the server.}
        c94708ca8927:@陳德玹 您好 请问最后是怎么解决的呢?
        程序猿_老李:@陳德玹 应该是本地服务器没有打开吧?? 最近比较忙, 不好意思才上简书, 才看到你的评论
        c7af9161c6f3:@陳德玹 最後試成功了,感謝版主的用心。
      • b75b36fdd6d6:旭哥, 如果电脑上有本地Mysql 然后装了xamppMySQL启动不了, 有什么好的办法?
        程序猿_老李:@YIem 请打开XAMPP 之后Manage Servers 然后先选中最上面MYSQL 然后点击右侧Configure 然后改一个端口号 不要用3306 因为你本地有Mysql了 默认端口已经被你本地的Mysql占用了
      • 丶人挫脸丑农村户口:你好,怎么在浏览器中会有这个错误


        Notice: Undefined index: name2 in /Applications/XAMPP/xamppfiles/htdocs/register.php on line 2

        Notice: Undefined index: pass2 in /Applications/XAMPP/xamppfiles/htdocs/register.php on line 3

        Notice: Undefined index: age2 in /Applications/XAMPP/xamppfiles/htdocs/register.php on line 4

        Notice: Undefined index: telephone2 in /Applications/XAMPP/xamppfiles/htdocs/register.php on line 5

        Fatal error: Uncaught Error: Call to undefined function mysql_connect() in /Applications/XAMPP/xamppfiles/htdocs/register.php:9 Stack trace: #0 {main} thrown in /Applications/XAMPP/xamppfiles/htdocs/register.php on line 9
        丶人挫脸丑农村户口:@M_Lee 是从最新那里下载的,只是更改了表面和数据库名称
        程序猿_老李:@丶人挫脸丑农村户口 你的register.php文件有问题...看我的github网址 重新下个吧
      • 3a101a8faea0:谢谢 大神 太有用了 :sob:
        程序猿_老李:@艾你一生 :wink: :relaxed:
      • Hai_qiang:还是注册失败
        <br /><b>Warning</b>: mysql_num_rows() expects parameter 1 to be resource, boolean given in <b>/Applications/XAMPP/xamppfiles/htdocs/register.php</b> on line <b>15</b><br />
        {"success":"0","status":"no"}

        求最新的PHP文件
        3a101a8faea0:你好问一下我也是这个问题 请问一下这是权限的问题吗 我PHP文件里面都更改了啊
        Hai_qiang:@M_Lee 谢谢分享,下载的PHP文件有问题,我自己修改了一下调通了。
        程序猿_老李:@Hai_qiang 看下github的链接应该有最新的
      • dc83b2f38dc0:学习了,谢谢大神分享
        程序猿_老李:@terence95 共同进步
      • 我没喝酒啊:2016-06-20 12:41:43.298 php[3110:39400] <br />
        <b>Fatal error</b>: Uncaught Error: Call to undefined function mysql_connect() in /Applications/XAMPP/xamppfiles/htdocs/register.php:9
        Stack trace:
        #0 {main}
        thrown in <b>/Applications/XAMPP/xamppfiles/htdocs/register.php</b> on line <b>9</b><br />

        大神 请问报这个错误是为什么?在注册的时候我点击注册按钮就会报这个错误
        程序猿_老李:@我没喝酒啊 你的XAMPP里面的php版本过高 不支持mysql_connect函数.. 你下载我给你的链接的那个XAMPP
      • 万少: php[29647:1257465] {"success":"-1","status":"have"}<br />
        <b>Warning</b>: fopen(/Applications/XAMPP/xamppfiles/htdocs/download2/Lidongxu.jpg): failed to open stream: Permission denied in <b>/Applications/XAMPP/xamppfiles/htdocs/register.php</b> on line <b>62</b><br /> 旭哥 一直出现这个错误
        3a101a8faea0:你好请问一下我也是出的这个问题怎么解决啊?
        万少:@万少 😄哈 解决了 是权限问题 终端输入权限命令错了
      • 红球酷:楼主方便留个联系 请教问题么
        程序猿_老李:@红秋裤 133315202
      • 红球酷: 我也报4楼同样的错误 Github上重新下载的register.php打开是乱码
        程序猿_老李:@红秋裤 打开127.0.0.1 然后进入phpmyadmin -> 然后看看数据库里有没有数据 php的代码已经重新上传了一份 https://github.com/lidongxuwork/Register-Login-PHP
      • hnxyzhw:php竟然乱码怎么看
        程序猿_老李:@hnxyzhw 谢谢您的提醒, 我已经验证下了, 确实是乱码, 我已经把php的代码重新上传了一份, https://github.com/lidongxuwork/Register-Login-PHP
      • 3f138f0e8514:我旭哥真帅:heart_eyes::heart_eyes:
        程序猿_老李:@Mrs_DongXu :kissing_closed_eyes:
      • 56d35fdf1a2a:大神 我没学过php 严格按照你的步骤操作的 但是为什么不能注册呢 会报这个警告:
        <b>Warning</b>: mysql_num_rows() expects parameter 1 to be resource, boolean given in <b>/Applications/XAMPP/xamppfiles/htdocs/register.php</b> on line <b>15</b><br />
        {"success":"0","status":"no"}
        夏天里的X甫次:大神,我也是这个警告无法注册,最后怎么解决啊?
        程序猿_老李:@来自蒙塔基的罡蛋 打开127.0.0.1 然后进入phpmyadmin -> 然后看看数据库里有没有数据
        程序猿_老李:@来自蒙塔基的罡蛋 register.php 里的代码有问题 你去github上下一下 我上传的那个文件比对下吧....
      • 36dfa3c92bd7:旭哥旭哥 :yum: :v:
      • c11d40cff2ce:旭旭加油!

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

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