设为首页 收藏本站
查看: 486|回复: 0

[经验分享] PHP + Ruby with ActiveRecord 範例

[复制链接]

尚未签到

发表于 2017-3-28 15:42:23 | 显示全部楼层 |阅读模式
如果老闆要求使用php,可是您卻是Ruby狂熱者,這.. 怎辦呢?
沒關係! 一樣用Ruby寫,php只要做一點點的處理就好!
How to? php中有這個函式:exec
( 本範例實作於Windows XP Professional搭配InstantRails;在其他作業系統上沒有測試過,不過各位還是可以嘗試看看 )
我們來試試看吧!
先寫個test.rb:

  #!/usr/bin/env ruby
  #
  # Filename: test.rb
  #
  puts "Hello"
  puts "world"
 
再寫個test.php:

  <?php
    exec("test.rb", $args);
    foreach($arg as $args)
      echo $arg . "<br />";
  ?>

將兩個檔案放在同一個目錄下後,打開瀏覽器瀏覽test.php;看!是不是顯示結果出來了?
OK,我們直接來用ActiveRecord幫我們新增資料吧!
我們需要一張普通頁面、一張php網頁跟一個ruby檔案:

  #!/usr/bin/env ruby
  #
  # Filename: ar.rb
  #
  require 'rubygems'
  gem 'activerecord'
  ActiveRecord::Base.establish_connection(
    :adapter => 'mysql',
    :host => 'localhost',
    :username => 'root',
    :password => '',
    :database => 'cal'
  )
 
  class Event < ActiveRecord::Base;end
 
  name, descr = ARGV[0], ARGV[1]
  puts Event.new({:name => name, :descr => descr, :date => Date.today, :time => Time.now}).save

好了,接下來是普通頁面,這是送出表單:
 
  <!-- Filename: ar_form.html -->
  <html>
    <head>
      <title>PHP with Ruby and ActiveRecord</title>
    </head>
    <body>
      <form action="ar_save.php" method="POST">
        Username: <input type="text" name="usrname" /><br />
        Description: <textarea name="descr"></textarea><br />
        <input type="submit" value="Save it!" />
      </form>
    </body>
  </html>
 
這是php網頁:

  <?php
    // Filename: ar_save.php
    exec("2.rb " . $_POST["usrname"] . " " . $_POST["descr"], $arg);
    if($arg[0]) echo "Success!";
  ?>

OK,讓我們來試試看吧!
Look!! It works!!
現在,我們來寫個ar_read.rb跟ar_read.php來讀取資料吧:

  # Filename: ar_read.rb
  require 'rubygems'
  gem 'activerecord'
  ActiveRecord::Base.establish_connection(
    :adapter  => "mysql",
    :host     => "localhost",
    :username => "root",
    :password => "",
    :database => "cal"
  )
  class Event < ActiveRecord::Base;end
  events = Event.find(:all, :conditions => "name = '#{ARGV[0]}'")
  events.each{ |event|
    puts event.name
    puts event.descr
    puts event.date.to_s(:db)
    puts event.time.strftime("%H:%M:%S")
  } 

  <?php
    // Filename: ar_read.php
    exec("ar_read.rb " . $_GET["name"], $args);
    $info = array();
    for($i=0, $j=0;$i<count($args);$i+=4, $j++){
      $info[$j]["name"] = $args[$i];
      $info[$j]["descr"] = $args[$i+1];
      $info[$j]["date"] = $args[$i+2];
      $info[$j]["time"] = $args[$i+3];
    }
    for($j=0;$j<count($info);$j++)
      echo "Name => " . $info[$j]["name"] . "<br />Description => " . $info[$j]["descr"] . "<br />Date => " . $info[$j]["date"] . "<br />Time => " . $info[$j]["time"] . "<br />";
  ?>
 
看看結果,hmmm.. 看起來真棒!
嗯?如何?Ruby + ActiveRecord的威力很強大吧?
為什麼不要直接用PHP寫就好? 因為光寫SQL你就想跳樓,何必呢?
記住,在Ruby的檔案中,不可以用:

  puts 1, 2, 3

這種方法,會造成php收不到回傳,因此必須用這種寫法:

  puts 1
  puts 2
  puts 3

或者就是:

  puts 1; puts 2; puts 3

端看個人喜好囉!


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-356720-1-1.html 上篇帖子: PHP SOCKET()方式发送邮件(附php类) 下篇帖子: 《PHP & More》第二期发布& 一些想法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表