アーカイブ7月、 2008年の

どのように手動で挿入するグループのユーザーには、 SMFのフォーラムPHPを使う

SMFの( 簡単な機械フォーラム) 、 7月にShortLikeAFoxてPHPを30日、 2008年に投稿

このチュートリアルは私の投稿に慣れていると仮定: どのように手動で挿入するためのSMFのユーザーフォーラムのPHPを使用しています。

私は最近、 800ほどの移動の挑戦に直面するSMFのフォーラムには、データベースからのバンド。 私の問題を移動するときに、私の最初の記事でカバーしていないことをいくつかに直面:

  1. バンド名の文字を移動して文字のためのSMFのデータベースに安全であることが保証されていない。 だから名の一部を変更するような機能を採用しなければならなかった。
  2. バンドのパスワードを持っていない。 そこでパスワード生成のいくつかのタイプのニーズを採用する。

私のすべてのフォーラムでは、バンドの登録を行ったの手順は次のように少し行った:

オープンは、バンドのデータベース

(バンド) (

パスワード生成

バンドの名前を変更する"安全"という名前で

グラブを生成するために必要な情報は、ユーザーを挿入

挿入バンドにsmf_members

バンドは、パスワードを記載したメールを送信

私は、有用な情報が含まれていたバンドデータベース:から入手したが、 bandEmail 、 bandNameとbandWebsite

ここに私を使ってパスワード生成機能です( blatently totallyphp.co.ukから)

関数 createRandomPassword ( ) (

$文字= " abcdefghijkmnopqrstuvwxyz023456789 " ;

() * 1000000); srand ( ( ) microtimeダブル ( ) * 1000000 ) ;

$私= 0 ;

$ = "を渡す;



( $ ながら私は< = 7 ) (

33; $ numが= ランド ( ) 33 ;

$ tmpに= substr ( $文字、 $ numが、 1 ) ;

$パス= $渡します。 $ tmpの;

$私+ + ;



$ リターンパス;

パスワードをここには比較的弱いが作成されますが、十分に私の目的のために良かった。 任意のパスワード生成機能をここにうまくいくと思います。 もし彼らが選んだメンバーを変更するにはないことを忘れては簡単になるので、私はこの1つを選んだ。

その方法を:

/ /まず、バンドのデータベースに接続
$ユーザ名= " bandUsername " ;
$ホスト= " bandHost " ;
$ mypassword = " bandPassword " ;
$ db_name = " bandDatabase " ;

("cannot connect to server"); "ホスト( " $ mysql_connect 、 " $ユーザ名" 、 " $ mypassword "は) または死ぬ ( "サーバーに" )を接続することはできません。
("cannot select DB"); mysql_select_db ( " $ db_name " ) または死ぬ ( " " ) DBを選択することはできません。

/ /これは、データベースからすべてのバンドをつかむ
$クエリ= "のSELECT * allBands " ;
$バンド=するmysql_query ( $クエリ)または死ぬ( "設定エラー2222b " ) ;
$ userRows = mysql_num_rows ( $バンド) ;

/ /これで、 SMFのデータベースに接続することができます
$ホスト= " smfhost " ; / /ホスト名
$ユーザ名= " smfuser ; / / MySQLユーザ名
$ mypassword = " smfpassword " ; / / mysqlのパスワード
$ db_name = " smfdatabase " ; / /データベース名

("cannot connect to server"); "ホスト( " $ mysql_connect 、 " $ユーザ名" 、 " $ mypassword "は) または死ぬ ( "サーバーに" )を接続することはできません。
("cannot select DB"); mysql_select_db ( " $ db_name " ) または死ぬ ( " " ) DBを選択することはできません。

/ / $ vaild_charsのユーザー名で許可文字の配列になるだろう。 私は文字と数字だけを許可することを決めた。 それは、問題が発生しないと使用される可能性があるその他の文字だが、スタイル上の理由で私は文字と数字だけで行くことにした
$ valid_chars = " abcdefghijklmnopqrstu vwxyz 0 1 2 3 4 5 6 7 8 9 " ;
$ valid_chars 爆発 = ( " " 、 $ valid_chars ) ;

/ /これでループに各バンドを通じて必要がある

){= 0 ( $ ; $私< $ userRows ; $私+ + ) (

($bands)){ ( $ 場合、行= mysql_fetch_assoc ( $バンド) ) (

/ /抽出は、バンドの情報を
抽出 ( $行) ;
/ /そのバンドのためのパスワードを作成します
$ realPassword = createRandomPassword ( ) ;
/ /私は、デバッグの一環として、 bandnameとパスワードをエコーには、作品を見ることができるので、機能を選択する
エコー ( "中<br/> bandName $ -$ r ealPassword" ) ;
$ newBand = " " ;
私たちは、 バンド名の場合は、 $ valid_charsは有効な文字と一致するかをよくチェックしている各文字/ /ください。 それは私たちを排除しよう進んでいることはありませんし、バンド名を切り捨てる
($bandName); $j ++ ){ ( $ジェイ= 0 ; $ジェイ< strlen ( $ bandName ) ; $ジェイ+ + ) (用

($band[$j])); $気温= str_replace ( $ valid_chars 、 " X "が、 strtolower ( $バンド[ $ジェイ] ) ) ;
( $ 場合、気温==の" X " )

$ = $ newBand newBand 。 $バンド[ $ジェイ] ;


/ /私は、古い名前とパスワードをエコー同じ理由のための新しい名前をエコー
" -$ n ewBand" )エコー;
/ /我々は、新しいバンド名が... 。 今の私たちは、 DBに挿入するために必要な情報buliding開始させてください...
$ = $ newBand memberName ;
$ = $ newBand realnameの; / /私は、本当の名前と同じメンバー名を設定します。 場合は、希望のバンドに変更することができます
$メールアドレス= $ bandEmail ;
$ websiteUrl = $ bandWebsite ; / /以来私も、これらを入力してくださいかもしれないバンドウェブサイトがある
$ = $ newBand websiteTitle ;
$ = 1 is_activated ;
$ ID_POST_GROUP = 4 ;
($memberName).$realPassword); //Password must be encrypted $パスワード= SHA1をstrtolower ( $ memberName ) 。 $ realPassword ) ; / /パスワードを暗号化する必要があります

/ / SMFのデータベース内の同じ名前の確認はないメンバを作成します。 私たちは誰にも誤って2回入力してくださいしたくない
$クエリ= "のSELECT *から" memberName 'のWHERE memberName = ' $ smf_members ;
("Config Error 2222343242b"); $結果= するmysql_query ( $クエリ) または死ぬ ( "設定エラー2222343242b " ) ;
$ nrows = mysql_num_rows ( $結果) ;

メンバー名が検出された場合は、 / /何もしない
$ nrows > 0 ) ( )の場合

他(

/ /場合は、フォーラムのユーザーは既に、署名されていませんこれを行うとしてメールを送信... 。
$クエリ= "挿入smf_members ( 、 、メールアドレス、 ID_POST_GROUP 、 websiteUrl passwdのは、 websiteTitle )の値( ' $ is_activated realnameのmemberName memberName ' 、 ' $ ' realnameを、 ' $ 'メールアドレス、 ' $ ' is_activated 、 ' $ ID_POST_GROUP ' 、 ' $パスワード' 、 ' $ ' websiteUrl 、 ' $ websiteTitle ' ) " ;

("Config Error 2232 "); $結果= するmysql_query ( $クエリ) または死ぬ ( "設定エラー2232 " ) ;

/ /これでは、バンドのメールを送信する必要がある
$ 〜 = $メールアドレス;
$件名= "あなたのフォーラムのユーザー名とパスワード" ;

/ /投稿者
$ヘッダー= "投稿者:ミー<me@mysite.com> " ;

/ /あなたのメッセージ
$メッセージ.= "あなたのログイン名とパスワードを次のとおりです。のいずれかをいつでも変更することができます。もし我々のフォーラムへの参加を望んでいないことに問題はない。ログインするだけで、それは何も今まで起こったことがないようにされる\研究です\ n " ;
$メッセージ.= "ユーザ名: $ memberNameパスワード: $ realPassword \研究です\ n " ;

/ /メールを送信
$送信済み= メール ( $ 、 $件名、メッセージ$ 、 $ヘッダー) ;
$送信済み)の場合

エコー ( " -はい! " ) ;
/ /これが私たちのエコーの最後の部分です。 は、 "はい! " メールを送信される場合にのみ印刷されます。 つまり、完全な印刷ライン以下のようになります:
/ /アダムスト-4 s6vsxag- Ad amStrife-はい!


手動で挿入する方法をユーザーには、 SMFのフォーラムにPHPを使う

SMFの( 簡単な機械フォーラム) 、 7月にShortLikeAFoxてPHPを28日、 2008年に投稿

この具体例1.1.5 SMFのです。 私は他のバージョンで動作することを保証することはできません。

だから、簡単な機械フォーラムソフトウェアを実行し、ユーザーが手動で入力するか? 大丈夫。 私はこの問題を非常に具体的だが、知っているのアイデアはここWordpressのフォーラムや他のデータベースなどのソフトウェアパッケージ駆動の他のタイプに適応させることができると説明した。 この操作を実行する前に、正確にどのようになる、シンプルなマシンを取る方法についてのフォーラムのユーザーの追跡を見てみよう。 は、 SMFのデータベースには、テーブルと呼ばれていますsmf_members 。 構造smf_membersこのようなものです:

競技場 種類 ヌル

債務不履行 エキストラ
ID_MEMBER はMEDIUMINT ( 8 )符号なし なし PRIに NULLを AUTO_INCREMENTの
memberName はvarchar ( 80 ) なし MUL
dateRegistered 内科( 10 )符号なし なし MUL 0
ポスト はMEDIUMINT ( 8 )符号なし なし MUL 0
ID_GROUP のsmallint ( 5 )符号なし なし MUL 0
lngfile tinytext なし MUL
lastLogin 内科( 10 )符号なし なし MUL 0
realnameの tinytext なし
instantMessages のsmallint ( 5 ) なし 0
unreadMessages のsmallint ( 5 ) なし 0
buddy_list テキスト なし
pm_ignore_list テキスト なし
messageLabels テキスト なし
passwdの はvarchar ( 64 ) なし
メールアドレス tinytext なし
personalText tinytext なし
はTINYINT ( 4 )符号なし なし 0
生年月日 日付 なし MUL 0001-01-01
websiteTitle tinytext なし
websiteUrl tinytext なし
場所 tinytext なし
アイシーキュー tinytext なし
AIMの はvarchar ( 16 ) なし
イム はvarchar ( 32 ) なし
MSNの tinytext なし
hideEmail はTINYINT ( 4 ) なし 0
showOnline はTINYINT ( 4 ) なし 1
timeFormat はvarchar ( 80 ) なし
署名 テキスト なし
timeOffset フロート なし 0
アバター tinytext なし
pm_email_notify はTINYINT ( 4 ) なし 0
karmaBad のsmallint ( 5 )符号なし なし 0
karmaGood のsmallint ( 5 )符号なし なし 0
usertitle tinytext なし
notifyAnnouncements はTINYINT ( 4 ) なし 1
notifyOnce はTINYINT ( 4 ) なし 1
notifySendBody はTINYINT ( 4 ) なし 0
notifyTypes はTINYINT ( 4 ) なし 2
memberIP tinytext なし
memberIP2 tinytext なし
secretQuestion tinytext なし
secretAnswer はvarchar ( 64 ) なし
ID_THEME はTINYINT ( 4 )符号なし なし 0
is_activated はTINYINT ( 3 )署名のない なし 1
validation_code はvarchar ( 10 ) なし
ID_MSG_LAST_VISIT 内科( 10 )符号なし なし 0
additionalGroups tinytext なし
smileySet はvarchar ( 48 ) なし
ID_POST_GROUP のsmallint ( 5 )符号なし なし MUL 0
totalTimeLoggedIn 内科( 10 )符号なし なし 0
passwordSalt varchar型( 5 ) なし

フィールド私たちに注意を払う必要があります:

  • memberName -自己E xplanitory。
  • dateRegistered -が必要とされていない場合は、日付を1 969年1 2月3 1日として表示されます登録に記入されていません。 タイムスタンプの日付をエポックとして保存されます。 あなたの頭の中でどのようにタイムスタンプを計算するのか分からないですか? 大丈夫。 私はここが見つかりました、フリー発生器を使用します。
  • realnameを-挿入される必要があります。 ときに私はここにmemberNameを繰り返すのか分からない
  • メールアドレス-自己E xplanitory。
  • メンバーを活性化されますので、手動 is_activated -1に設定する必要があります。
  • ID_POST_GROUP -私はうそをつくことはありません。 私はこの何なのか分かりませんが、常に4に設定しているようだ。 だから... 。 私はいつも4に設定します。 プログラムには最良の方法はどうするの?
  • passwdの-場合は、新しいユーザーのパスワードを付与する。 それは、 SMFのマニュアルを見ないで入力してくださいを理解することは不可能です。 適切なコードは、データベース用のSMFのパスワードを暗号化するためにこのようなものです:

($memberName).$password) $ passwdの= SHA1をstrtolower ( $ memberName ) 。 $パスワード)

コードの上の行では、 $パスワードは、ユーザーの実際のパスワードです。

その方法を:

/ /まず、 SMFのデータベースに接続

$ホスト= "ホスト名" ; / /ホスト名
$ユーザ名= "ユーザー名" ; / / MySQLユーザ名
$ mypassword = "パスワード" ; / / mysqlのパスワード
$ db_name = "ユーザー名" ; / /データベース名

("cannot connect to server"); "ホスト( " $ mysql_connect 、 " $ユーザ名" 、 " $ mypassword "は)または死ぬ ( "サーバーに" )を接続することはできません。
("cannot select DB"); mysql_select_db ( " $ db_name " ) または死ぬ ( " " ) DBを選択することはできません。

$ memberName = "アイアンマン" ;
$ realnameを= "トニースターク" ;
$メールアドレス= " ironMan@ironMan.com " ;
$ = 1 is_activated ;
$ ID_POST_GROUP = 4 ;

$パスワード= " Tony1234 " ;

($memberName).$password); $パスワード= SHA1をstrtolower ( $ memberName ) 。 $パスワード) ;

$ = 1216951200 dateRegistered ; / / 2008年7月25日午前2時

$クエリ= "に挿入、 、 ' $ 'メールアドレス、 ' $ ' is_activated 、 ' $ realnameの' ' $ memberName ' ( 、 、メールアドレス、 ID_POST_GROUP 、 dateRegistered passwdのis_activated realnameの) memberName値( ' $ smf_members ID_POST_GROUP ' 、 ' $パスワード' 、 ' $ dateRegistered ' ) " ;
("SMF Error 101.234 "); $結果= するmysql_query ( $クエリ) または死ぬ ( " SMFのエラー101.234 " ) ;

は、すべての設定は完了です!

サムネイル画像をどのように PHP を使用する

機能では、 ShortLikeAFoxてPHPを2008年7月22日投稿

そうすれば、与えられたイメージから、このタスクのサムネイルを作成する... PHPを簡単にします。 私は最初の画像をユーザーが私の管理に役立つサイトにアップロードさに対処するため、以下の機能を書いている。 このサイトにアップロードされた画像はJPEG 、 pngs 、またはGIFをので、すべての3つに対処するための関数を書く必要があったことができます。 このコードは、もともとは機能に基づいているwebcheatsheet.comで発見

その方法を:

関数 createThumbs ( $ pathToImages 、 $ fname 、 $ pathToThumbs 、 $ thumbWidth )

/拡張子/パースパス

$インフォメーション= PathInfoを ( $ pathToImages 。 $ fname ) ;
/ /継続する場合にのみ、これはJPEG画像です
($info['extension']) == ‘jpeg’) ) ( ( strtolower ( $場合インフォメーション[ '拡張子' ] ) == ' 'のjpg ) | | ( strtolower ( $インフォメーション[ '拡張子' ] ) == ' ' JPEG準拠) )

/ /読み込み画像や画像のサイズを取得
$スペース= ( " ( $ pathToImages ) ( $ fname" ) imagecreatefromjpeg ;
$幅= imagesx ( $スペース) ;
ドル高さ= imagesy ( $スペース) ;

/ /サムネイルのサイズを計算する
$ new_width = $ thumbWidth ;
$ new_height = ( $高さ* ( $ thumbWidth / $幅) ) ;

/ /新しい一時的なイメージを作成
$ tmp_img = imagecreatetruecolor ( $ new_width 、 $ new_height ) ;

/ /コピーしてサイズを変更する古いイメージを新しいイメージに
imagecopyresized ( $ tmp_img 、 $スペース、 0 、 0 、 0 、 0 、 $ new_width 、 $ new_height 、 $幅、ドル高さ) ;

/ /サムネイルをファイルに保存する
imagejpeg ( $ tmp_img 、 " ( $ pathToThumbs ) ( $ fname ) " ) ;

strtolower ( $場合インフォメーション[ '拡張子' ] ) == ' gif形式' )

/ /読み込み画像や画像のサイズを取得
$スペース= imagecreatefromgif ( " ( $ pathToImages ) ( $ fname ) " ) ;
$幅= imagesx ( $スペース) ;
ドル高さ= imagesy ( $スペース) ;

/ /サムネイルのサイズを計算する
$ new_width = $ thumbWidth ;
$ new_height = ( $高さ* ( $ thumbWidth / $幅) ) ;

/ /新しい一時的なイメージを作成
$ tmp_img = imagecreatetruecolor ( $ new_width 、 $ new_height ) ;

/ /コピーして古いイメージを新しいイメージにサイズを変更する
imagecopyresized ( $ tmp_img 、 $スペース、 0 、 0 、 0 、 0 、 $ new_width 、 $ new_height 、 $幅、ドル高さ) ;

/ /サムネイルをファイルに保存する
imagegif ( $ tmp_img 、 " ( $ pathToThumbs ) ( $ fname ) " ) ;

strtolower ( $場合インフォメーション[ '拡張子' ] ) == ' PNG形式' )

/ /読み込み画像や画像のサイズを取得
$スペース= ( " ( $ pathToImages ) ( $ fname ) " ) imagecreatefrompng ;
$幅= imagesx ( $スペース) ;
ドル高さ= imagesy ( $スペース) ;

/ /サムネイルのサイズを計算する
$ new_width = $ thumbWidth ;
$ new_height = ( $高さ* ( $ thumbWidth / $幅) ) ;

/ /新しい一時的なイメージを作成
$ tmp_img = imagecreatetruecolor ( $ new_width 、 $ new_height ) ;

/ /コピーしてサイズを変更する古いイメージを新しいイメージに
imagecopyresized ( $ tmp_img 、 $スペース、 0 、 0 、 0 、 0 、 $ new_width 、 $ new_height 、 $幅、ドル高さ) ;

/ /サムネイルをファイルに保存する
imagepng ( $ tmp_img 、 " ( $ pathToThumbs ) ( $ fname ) " ) ;

どのように動作する

createThumbs 4つの関数の引数をとります。

  • $ pathToImages ->は、画像ファイルは、この: /ホーム/コンテンツ/ユーザ名/ H TML形式/一覧/アップロードのようなものに見えるかもしれませんがインチされているフォルダへのパス/
  • $ fname ->ファイル名: p ic1.gif、 j ohnny.jpg、等. ..
  • $pathToThumbs -> The path to the folder you want the thumbnail image to be in. You DO NOT want this to be the same path as $pathToImages, because the thumbnail image will have the same name as the original image.
  • $ thumbWidth ->の幅をピクセル単位でするサムネイルします。

重要なことに注意して作成してください私はここでは、この関数は、ファイル拡張子をチェックよりも、何も悪意のあるイメージファイルが含まれていることを確認し、他の場所には何もしている。 createThumbs以来のファイル( )が既にそのファイルを適切に精査されていると想定さアップロードされているで動作します。

まず最初にcreateThumbs ( )がコールPathInfoを( )です。 PathInfoを( )を配列には、パスの部分を破壊。 ので、適切にサムネイルを作成するファイルの拡張子が必要これは私たちに、便利です。 jpegファイルを扱っている場合は次のcreateThumbs ( )かどうかを確認してください。 場合は、元のファイルは、 JPEG createThumbsの新しい画像は、元の画像をimagecreatefromjpeg をベースに作成されます( ) 次のステップは、このイメージの幅と高さを得ることです( imagesx ( )imagesy ( ) ) とは、元の幅と高さの比率thumbWidth $ createThumbs ( )を使って、新しいサムネイルの幅と高さを設定します。 これらの新しい比率createThumbs ( )の使用法は、同じ幅とimagecreatetruecolor ( ) 。 imagecopyresized ( )は、画像のサイズを変更するに保存使用されているとのサムネイル の高さになる " "空の画像を作成する" "空白だけ作成。 imagecopyresized ( )のように思えるかもしれないが、パラメータがかかる場合は、本当に複雑ではないがされているマニュアルを見てください。 今は、真のカラー画像のサムネイルとして存在するすべてのcreateThumbsするために必要なファイルはJPEGに変換されています。 このimagejpegを行う( )と呼ばれています。

それはどのように機能JPEG画像のための作品だ。 そこに最小限の違いがある。 pngsと。 GIFを。

どのように書くのブラウザ固有のコードをPHP

PHPでShortLikeAFoxで2008年7月21日投稿

ので、特定のブラウザのみに表示されるコードを記述したい...が、このことをやりたい理由のための数々です。 私は個人的にこれを行うために必要な最初の時私は、特定のページに埋め込むmp3しようとしていたが発生しました。 そうだとは、 mp3 』 ( IE 、 Firefox 、およびオペラ)に私はテストでは、ブラウザ上で再生すると検証が同時にコードを書くことができなかったいくつかの理由のため。 もし私の記憶が正しければ、 Internet Explorerは、問題の原因だった。 とは、ユーザーはIEを使用して、を見つけるために、ほとんどのPHPを使用するようにしていた何かが起きている場合は、この問題を解決する場合はmp3以外の有効なコードを埋め込む。

これは、 W3CのバリデータはIE自体を識別することはないとして、このソリューションは、 MP3の再生は常に正しくページを常に検証し、主導した。 これはW3Cのコンプライアンスに達すると、最も倫理的な方法がないかもしれないが、動作します。

別の時間が私のブラウザ固有のコードを書くことを必要と覚えているときには正しくてもよい。 PNG形式の画像に表示されない問題が発生していたIEの6としている。 私の周りgoogledと、問題の解決策を見つけたのが、かれらの両方を自分のページには、全体の層の場所を間違えたが終了しました。 その問題のトラブルシューティングのではなく、私はすぐに解決策を行って表示することを決めた。 GIFをしていたときに、ユーザーはIE 6 。 していた場合は、ユーザーが別のブラウザしていた。私は、彼にとっても悪いと思ったPNG形式の問題。

どのようにそれを実行する:

最初に、コードの行を書くことはちょっと何しているユーザーのブラウザを理解する必要があります。 ここにどのように行うには、 PHPで:

  • 'HTTP_USER_AGENT' ]; $ visitorsOS = $ _SERVER [ ' HTTP_USER_AGENT ' ] ;

ここで$ visitorsOSの3つの例があるように見えることができます

  • Mozilla/4.0 (互換性; MSIE 6.0 ;のWindows NT 5.1 ; SV1 ; 。 NETのCLRの1.0.3705 ; 。 NETの
  • Opera/9.51 ( Windows NTの5.1 ; Ü ; 1043 )
  • Mozilla/5.0 ( Windowsの; Ü ;のWindows NT 5.1 ;クリックしてください。右室: 1.9 ) Gecko/2008052906 Firefoxの

最初のユーザーのInternet Explorer 6は、オペラ9.51 、およびFirefoxの2番目3番目。

よりも、実際のところ、我々をするために必要な訪問者のコンピュータに関する詳細な情報を知る必要がある今、その情報を十分利用してください。 場合は、ユーザーがInternet Explorerのすべてのバージョンを実行しているだけが表示されるコードを作成するとします。 この操作を行うとその場合は:

(’MSIE’,$visitorsOS)){eregi ( ' MSIE ' 、 $ visitorsOS ) ) (場合

コードは、ユーザーがIEをしている場合にのみ表示されます

他のすべてのケースでは、コードが表示されます

私の代わりにereg 、敏感な正規表現に一致する場合に一致eregi 、大文字小文字を区別しない正規表現を使用しています。 もし私はこの妄想のうち、またはを行う場合、実際にはInternet Explorerの場合は、それ自体として識別が見つかりましたmsie覚えていない。 私が使っているので、どちらの場合eregiでは何も害はないよ。 ほんのわずかな変更を必要とするIEの特定のバージョンのコードを書くことを望む。 の代わりに...もし私がMSIE 6.0の登場だけをコード( eregi ( ' MSIE ' ... )私は( eregi ( ' MSIE 6.0 ' ... )のようなものを使用します。