トップページphp
1001コメント300KB

くだすれPHP(超初心者用)4

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん2008/06/13(金) 20:32:36ID:???
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
PHP使いが優しくコメントを返しますが、
お礼はPHPの布教と初心者の救済をお願いします。

PHP Home Page
http://www.php.net/
http://jp.php.net/



前スレ: くだすれPHP(超初心者用)3
http://pc11.2ch.net/test/read.cgi/php/1193295871/

適当に関連スレ(マルチはだめぽ)
【PHP】下らねぇ質問はここに書き込みやがれ 69
http://pc11.2ch.net/test/read.cgi/php/1211879073/
0867nobodyさん2008/11/17(月) 12:40:07ID:KhW4/uRq
>>866
ありがとうございます
判定はbcdivを使う事で判定する事が出来るようになりました
0868nobodyさん2008/11/17(月) 12:48:40ID:???
>>867
Windows以外で任意精度数学関数を使う場合は
--enable-bcmathつけてコンパイルしてある必要があるので気をつけて
0869nobodyさん2008/11/17(月) 12:57:48ID:???
出来るようになったって言ってんだろカス
0870nobodyさん2008/11/17(月) 15:08:00ID:???
>>863
floor((0.1+0.7)*10);
の例にしても、echo 0,1+0.7なら0.8と表示されるよ。
0871nobodyさん2008/11/17(月) 15:11:02ID:???
そりゃ丸められてるからだろ
0872nobodyさん2008/11/17(月) 15:48:18ID:???
そう。だから1100/1.1も1000と表示されるけど実際には丸められてる
0873sage2008/11/17(月) 16:44:22ID:fS1MxP+5
超初心者です。
XAMPPのDBにアクセスしてるPHPを読んでてわからなかった事があるのですが、
PHPのはじめの所が「<?」や「<?php」ではなく、
「<?=」となっていて、

<?=$TEXT?>
という感じで変数を表示してたところがありました。
これはechoと何が違うのでしょうか?

これの様に左辺が無い場合はどういう動作になるのでしょうか・・・
よろしくお願いします。
0874nobodyさん2008/11/17(月) 16:54:17ID:???
>>873

http://jp.php.net/echo

echo() には、開始タグの直後に等号を付ける短縮構文もあります。 この短縮構文は、設定オプションshort_open_tag  が有効な場合のみ使用可能です。
0875nobodyさん2008/11/17(月) 17:20:33ID:???
>>874
ありがとうございます!
echoとの違いではなくて、echoの短縮だったんですね。
スッキリしました。
0876nobodyさん2008/11/17(月) 19:55:05ID:G7bu0AqY

コノスレイイ。

ロムってたけど。

\(^o^)/イイ。
0877nobodyさん2008/11/17(月) 19:55:43ID:???
マニュアルも読まないなんて
0878nobodyさん2008/11/18(火) 08:21:36ID:???
作られたhtmlファイルが文字化けしてしまうのですがなんでなのでしょうか。

<?php
$word = '漢字';
$word = mb_convert_encoding($word, "UTF-8");
$page =$word.'.html';
$str = mb_convert_encoding($page, "UTF-8");
$fp = fopen($str,"w");

?>
0879nobodyさん2008/11/18(火) 08:31:36ID:???
何がしたいのか意味不明
0880nobodyさん2008/11/18(火) 08:48:01ID:???
>>879
漢字.htmlというファイルを作りたいのですが、
文字化けしてしまうんです。
0881nobodyさん2008/11/18(火) 08:50:08ID:???
ちゃんとエンコード元を指定すべし
0882nobodyさん2008/11/18(火) 08:54:43ID:???
>>881
$str = mb_convert_encoding($page,"UTF-8","auto");

autoでもSJISでもできないんです。
0883nobodyさん2008/11/18(火) 09:04:13ID:???
autoは指定になってない
php.iniの設定とソースの文字コード、ブラウザの文字コードによっても変わる
detectもしつつ色々試行錯誤してみ
0884nobodyさん2008/11/18(火) 09:06:01ID:???
>>878
何を元にhtmlファイルが文字化けてると言ってるの?
何かソフトで見た場合の事?
0885nobodyさん2008/11/18(火) 09:08:54ID:???
>>883
<?php
$word = '漢字';
$word = mb_convert_encoding($word,"UTF-8","SJIS");
$page =$word.'.html';
$str = mb_convert_encoding($page,"UTF-8","SJIS");
echo mb_detect_encoding($str);
print '<BR>';
echo mb_detect_encoding($page);
print '<BR>';
echo mb_detect_encoding($word);
$fp = fopen($str,"w");
?>
結果は
UTF-8
UTF-8
UTF-8
なんですが。
0886nobodyさん2008/11/18(火) 09:21:39ID:???
>>884
ファイル名が"髮区誓・ス・「髯・html"になるんです。
0887nobodyさん2008/11/18(火) 09:23:18ID:???
>>886
何で見た時に?
0888nobodyさん2008/11/18(火) 09:26:22ID:???
>>887
ローカルで作成しているので、自分のパソコンで見たときにです。
0889nobodyさん2008/11/18(火) 09:44:19ID:???
ファイルの内容のエンコードとファイル名のエンコードは関係ないぞ。
環境は?OSとか
0890nobodyさん2008/11/18(火) 09:49:02ID:???
>>888
OSの文字コードで書き出さないと化けたように見える
0891nobodyさん2008/11/18(火) 10:06:07ID:???
どっちにしても漢字ファイル名はクライアントの環境やブラウザの仕様によって読めないケースがあるから
使わない方がいいな
0892nobodyさん2008/11/18(火) 12:40:23ID:???
windowsの文字コードは普通jisだわな
0893nobodyさん2008/11/18(火) 12:48:09ID:???
>>889
windowsです。
0894nobodyさん2008/11/18(火) 12:48:43ID:???
>>892
普通はCP932(SJIS-WIN)
0895nobodyさん2008/11/18(火) 13:13:57ID:???
ああそれで俺もファイル名の文字化けに悩んだ記憶がある
0896nobodyさん2008/11/18(火) 14:27:45ID:VeQnY2gN
今IDとパスのログイン画面で次回からログインを省略するチェックボックス
を作ってます。チェックを入れるとsession_set_cookie_paramsを
1年に設定してるんですが一度ブラウザを閉じるとセッションも切れてしまいます・・・
下に簡単なソースを載せますので
すいませんがアドバイスよろしくお願いします。

login1.php
<?
session_set_cookie_params(365*24*3600);
session_start();
$_SESSION["name"] = "こんにちは";
echo "セット";
echo "<a href=\"login2.php\">移動</a>";
?>

login2.php
<?
session_start();
echo $_SESSION["name"];
?>
0897nobodyさん2008/11/18(火) 16:17:38ID:???
やってみたけど俺の環境だと残ってたよ
firefox?
08988962008/11/18(火) 16:33:43ID:???
>>897
返答ありがとうございます。
環境はIE7、Firefoxです。
最初にlogin1.phpにアクセスし
セッションを設定して移動をクリックすると
login2.php にもセッションが引き継がれるんですが
その後ブラウザを閉じ次にlogin2.phpにダイレクトにアクセスすると
$_SESSION["name"] = "こんにちは";が表示されず
真っ白になります・・・
0899nobodyさん2008/11/18(火) 17:09:56ID:???
自動セッション開始のディレクティブも考慮して、
クッキーの有効期限はsetcookieで設定した方がいいぜ
session_startする前に実は開始してて、有効期限の上書きが出来ないことがあるから
0900nobodyさん2008/11/18(火) 17:36:13ID:s+xeZpDT
質問です。
変数$strをintにキャストしたいのです。
ご教授お願いします。
$str = "ST012300";
$str = (int)$str;
$num = 100;
$num += $str;
echo $num; ←ここで出力


0901nobodyさん2008/11/18(火) 17:57:13ID:???
STのところが必ず2文字ならsubstrで切り取ってからキャストすればいいんでないの?
0902nobodyさん2008/11/18(火) 18:34:52ID:???
>>900
適当に書いたがこんな感じか?

function toInt($string) {
$temp = "";
for ($i = 0; $i < strlen($string); $i++) {
if (preg_match("/[0-9]/", $string[$i])) {
$temp .= $string[$i];
}
}
return (int)$temp;
}
0903nobodyさん2008/11/18(火) 18:40:56ID:???
>>902 おまえアホだろ。なんのためにpreg_matchつかってるんだよ。
0904nobodyさん2008/11/18(火) 18:53:16ID:???
>>903
1文字ずつ分解するのが無難なやり方でないかと
preg_match_allが俺の環境じゃ使えないから使わなかっただけというのもあるけど
preg_matchだけでくり抜ける?
例に出てるST012300なら簡単だけど
o89WE342hEU44とか2バイト文字が入ってきたりすると
俺のレベルじゃ1回の正規表現で抜き取れない
09058962008/11/18(火) 18:54:44ID:???
>>899
session_startする前に開始している時もあるんですね。
アドバイスいただいたやり方で一度やってみます。
ありがとうございました!
0906nobodyさん2008/11/18(火) 18:54:48ID:???
元質問者の必要なものがどれかによるだろうけど、
飛び飛びの数字くっつけて1つの数字にすることに意味があるのか?
0907nobodyさん2008/11/18(火) 18:56:46ID:???
is_numericでいいじゃん
あと引数に配列渡された場合どうすんのとか
0908nobodyさん2008/11/18(火) 19:15:25ID:???
>>907
is_numericでもいいけどpreg_matchでもいいじゃん
>>903の突っ込みはpreg_match使うなら1回で抜けってことではないの?
その方法が思いつかなかったから聞いてるんだけども
>あと引数に配列渡された場合どうすんのとか
それは配列用のを別に作るべきでしょ
PHPじゃオーバロードできないけど
0909nobodyさん2008/11/18(火) 19:20:22ID:???
preg_matchで行うことに何の利点があるの?
0910nobodyさん2008/11/18(火) 19:26:49ID:???
強力な正規表現が使える。
逆に言うと正規表現がわからないと混乱するだけ。
0911nobodyさん2008/11/18(火) 19:34:38ID:???
>>909
普段よく使うから使っただけだよ
is_numericなんて使ったことなかったし

まぁ気になったんで
>>902で書いた関数で文字列に適当なwebサイトをfile_get_contentsしたものを使って
is_numericとpreg_matchの比較ベンチとってみたけど
is_numericのほうが早いね

速度面では特に利点はないみたいだ
ただ>>910もいってる通りうまく使える人なら1行でスッキリと1回で抜けると思う
オーダなんかは1文字ずつ比較するのとたぶん変わらないと思うけど
0912nobodyさん2008/11/18(火) 20:47:26ID:???
$str = "ST012300";

という前提があるなら、漏れなら、

ereg( '(\d+)', $str, $regs );

echo $regs[1];

と書く。
0913nobodyさん2008/11/18(火) 20:52:15ID:???
どういう前提だよw
文頭がアルファベットか?文字数が8文字か?数字が0〜3までか?
数値が連続してるなんて前提ねーよw
0914nobodyさん2008/11/18(火) 20:55:45ID:???
>>900
盛り上げていただいてありがとう御座います。
参考にさせていただきます。
0915nobodyさん2008/11/18(火) 20:56:46ID:???
お前はすっこんでろ
0916nobodyさん2008/11/18(火) 20:57:31ID:???
最初に現れた数字列を引っ張ってくるという前提だ。
0917nobodyさん2008/11/18(火) 21:48:50ID:/cO8JIvu
開発環境はXAMPPで作ってる初心者で質問なんですが、
PHPからDB2に接続するにはどうしたらいんですか?
MySQLからDB2に移行したいんです!何か特別な設定とかいります?

カタログ接続とかの意味がよく分からないです^^;
0918nobodyさん2008/11/18(火) 21:57:01ID:???
初心者ならXAMPPを使うな
0919nobodyさん2008/11/18(火) 22:05:18ID:???
>>917
それより何故DB2? MySQLの方が圧倒的に楽じゃん。
0920nobodyさん2008/11/18(火) 22:05:36ID:???
>>917
XAMPPはDB2じゃないからあきらめてね
DB2使うならPEARかPDO使えば
0921nobodyさん2008/11/18(火) 22:32:54ID:???
>>917 ODBC経由
0922nobodyさん2008/11/18(火) 23:49:32ID:???
<?php
$file ='test.html';
$fp = fopen($file,"w");
$str = array('aaa\n','bbb\n');
file_put_contents($file, $str );
fclose($fp);
?>

複数行の書き込みをしたいのですが、これだとできません。
教えて下さい。
0923nobodyさん2008/11/18(火) 23:51:48ID:???
なんでarrayなの?
0924nobodyさん2008/11/18(火) 23:54:15ID:???
'aaa\n'と"aaa\n"は違う
0925nobodyさん2008/11/19(水) 00:04:54ID:???
>>924
できました。ありがとうございます。
0926nobodyさん2008/11/19(水) 01:53:56ID:???
条件分岐をさせてMySQLのデータを削除しようとしているのですが

$pass1 = $_POST["pass"];
  if($pass1=="●●"){
  $sql = "delete from object where id = $id";
  mysql_query($sql);
  echo "削除されました";
  exit;
}

●●の部分をMySQLに格納しているパスワードに
したい場合はどうすればいいのでしょうか?
MySQL側の質問になってしまうかもしれませんがお願いします。
0927nobodyさん2008/11/19(水) 02:16:00ID:???
htmlタグをprintするときに、
"のエスケープをせずに済む方法ってありますか?
大量のhtmlタグをprintするのが大変なのでそのような関数があれば
教えていただきたいです。
0928nobodyさん2008/11/19(水) 02:22:55ID:???
>>926
それの前にクエリ発行して格納しているパスワードを取ってくれば?
>>927
シングルクオートにすれば?
0929nobodyさん2008/11/19(水) 02:22:59ID:???
関数じゃないけどヒアドキュメント
0930nobodyさん2008/11/19(水) 02:30:59ID:???
>>929
ヒアドキュメントの中に変数って使えますか?
09319262008/11/19(水) 02:32:56ID:???
>>928
うぉぉぉぉできました!!!
すっごい単純なことだったのに完全に頭が固くなってました!
ありがとうございます!!
0932nobodyさん2008/11/19(水) 03:07:53ID:???
>>928
>>929
アドバイスありがとうございました。
テンプレート作って置換したら簡単にできました。
0933nobodyさん2008/11/19(水) 09:43:10ID:???
すいません
ご存じなかたがいらっしゃったら教えていただけると幸いです

自作のスクリプトをばらまこうと思ってるのですが
ファイル構成やパーミッションまわりが複雑だったりするので
インストールウィザードをつけたいと考えてます
自己解凍形式みたいに
フォルダやパーミッションや簡単な設定項目(置換)を指定すると
そのとおりに設定して展開してくれるようなスクリプトはありますでしょうか?

なければ作ろうかと思うのですが
需要ありますでしょうか?

一通り探したつもりですが見つかりませんでした

よろしくお願いします
0934nobodyさん2008/11/19(水) 10:15:16ID:???
>>933
パーミッションってことはOSX含めたUnix系OSだよね?
RPMパッケージでも作ればいいんじゃない?
というか展開したファイルのパーミッションを変えるスクリプト1つ置くだけでいいのでは?
複雑な設定項目とかはインストール後に管理スクリプトからやればいいだけだし
そもそもサーバでそんなもの展開してインストールするようなのは自鯖か専鯖持ちぐらいでしょ
ターゲットの範囲が狭すぎてそのためにわざわざ凝った作り考えるのもあほくさいわ
09359332008/11/19(水) 10:58:08ID:???
>>934
レスありがとうございます

移動中の携帯からの投稿だったため情報が足りませんでした
ここでいうスクリプトはPHPのスクリプトで
ターゲットはLinux+レン鯖を考えています

処理の流れ的には
1.自己解凍PHPにWEB経由でアクセス
2.DIRパスやそのスクリプトの起動に最低限必要な定数を設定
3.指定DIRに展開
4.自分自身を削除(オプション)+そのスクリプトの設定画面へリダイレクト(あれば)

単一ファイルにまとめたかったのは
・配布しやすそう?
・WEB公開DIRに必要ないファイル(incとか)を置きたくない
 (必要ないファイルの置き場所は自由なため、公開DIRからの相対パス指定は難しい)

確かにインストールスクリプトを一個用意しておけばいい気もしますね・・・
0936nobodyさん2008/11/19(水) 13:10:11ID:???
>>935 需要あれば作るんじゃなくて、
作ったあとに需要あれば使って下さいの方がいいと思うよ。

ぞれより自己解凍PHPってのがなんなのか気になる
0937nobodyさん2008/11/19(水) 13:22:48ID:???
たとえば$msg=htmlspecialchars($_POST['message'],ENT_QUOTES);で、POST(message)を取得したとして、その中身がなかった場合って$msgは存在しないことになるんですかね。
if($msg)ってやったらfalseでした。
それとも$msgってなまえの変数は有っても中身がない場合はfalse?
0938nobodyさん2008/11/19(水) 13:27:45ID:???
htmlspecialchars関数の戻り値ぐらいマニュアルに載ってない?
09399332008/11/19(水) 14:03:57ID:???
>>936
確かに
作ってみます

ありがとうございます

自己解凍PHPとか言ってますが
単純に自身のPHPにファイルやらディレクトリ構成を埋め込んでるだけです
アクセスすると入力域が現れて・・・てな感じです
0940nobodyさん2008/11/19(水) 14:29:26ID:???
> 単純に自身のPHPにファイルやらディレクトリ構成を埋め込んでるだけです
> アクセスすると入力域が現れて・・・てな感じです

それが気になる。ウェブ上からインストールできるってこと?
0941nobodyさん2008/11/19(水) 14:53:34ID:???
インストールスクリプトでないなら意味が分からん.圧縮してんの?
なんで初心者なのに用語を自作するのか
0942nobodyさん2008/11/19(水) 15:21:15ID:???
ひらがな・カタカナ・数字・アルファベット・シフトJIS第一・第二水準漢字
以外の物を調べるにはどうしたらいいですか?
具体的にはJIS補助漢字・第三・第四水準漢字や台湾、中国語などには
エラーと表示させたいです。
0943nobodyさん2008/11/19(水) 15:29:40ID:???
>>942
ttp://euc.jp/i18n/charcode.ja.html
どの文字コードを使うかによって変わると思うけど
こういったとこで範囲しらべて正規表現でチェックするといいかも?

ここも参考
ttp://www.phppro.jp/phptips/archives/vol9/1

0944nobodyさん2008/11/19(水) 15:57:48ID:???
>>943
ありがとうございます。
09459332008/11/19(水) 16:07:24ID:???
>>940
はい、そのとおりです
適当な公開ディレクトリにファイルを一個ぽいっとおいて
アクセスしてWEB上でパスの設定などをしてsubmitすると
設定に基づいて展開したりシンボリックリンクを作ったり文字コード変えたり設定情報を書き込んだりします

>>941
申し訳ない
PHPで自己解凍みたいのできたらいいなイメージから思いついたので・・・
今動いているのは圧縮してないですが、あとでgzipをかけたいと考えています

低機能なインストールスクリプトと思ってください
最低限の設定を行ってさらに設定が必要なら(データベース作るとか)それぞれの設定WEBにリダイレクトします
既存のインストールスクリプトと違うところは
・ファイルひとつだけでOK
・複数台のサーバ配布に対応(scpばらまき)・・・予定(作成中)

結局のところ展開してアップすればええやんって気もしてきましたorz
09469332008/11/19(水) 16:29:07ID:???
似たようなの見つけました
ちょっと機能は違いますがコンセプトは似ているような気がします
ttp://labs.cybozu.co.jp/blog/kazuho/archives/2008/11/post_3.php
0947nobodyさん2008/11/19(水) 19:46:11ID:???
>>933 まずは作ってみようよ
0948nobodyさん2008/11/20(木) 03:17:06ID:???
改行がなくならないように
mb_convert_encodingを使う方法ってありますか?
0949nobodyさん2008/11/20(木) 03:17:23ID:???
なくなんないべ
0950nobodyさん2008/11/20(木) 03:21:12ID:???
>>949
ありがとうございます。
勘違いしていたようです。
0951nobodyさん2008/11/20(木) 04:28:16ID:???
ファイルの最終更新時間のUNIXタイムスタンプを
取得したいのですが、
time()は引数がないのでどうしたらいいですか?
0952nobodyさん2008/11/20(木) 04:31:17ID:???
3行目が意味不明だけど
filemtimeかstat
0953nobodyさん2008/11/20(木) 04:38:25ID:???
>>952
ありがとうございました。
0954nobodyさん2008/11/20(木) 05:24:16ID:???
正規表現でマッチしない行を
削除するにはどうしたらいいのでしょうか。
0955nobodyさん2008/11/20(木) 07:43:03ID:???
マッチした行を連結すればいいだけ
0956nobodyさん2008/11/20(木) 07:54:07ID:???
マッチさせて空白に置換すりゃいいじゃん
0957nobodyさん2008/11/20(木) 14:54:48ID:???
$logは
sample(9)
sample(241)
sample(3234)
などの複数行のファイルでカッコ内の数字が一ケタの場合
その行を削除したいのですが、
$search="/.+\([0-9]\)/";
$log = eregi_replace($search,"",$log);
これだとできません。教えて下さい。


0958nobodyさん2008/11/20(木) 15:21:21ID:???
preg_replace("/.*?\(\d\)\n/", "", $log)

こうかな
0959nobodyさん2008/11/20(木) 17:03:07ID:???
>>958
できないです。
0960nobodyさん2008/11/20(木) 17:16:11ID:???
できました。
0961nobodyさん2008/11/20(木) 17:17:34ID:???
今後のためにもどうやったらできたのか教えてよ
0962nobodyさん2008/11/20(木) 17:24:44ID:???
>>961
すいません。
>>958さんの方法でできました。
他のところが間違えてました。
0963nobodyさん2008/11/21(金) 04:12:35ID:???
$logは複数行あるテキストファイル
$logArray = explode("\n",$log);

for($i=0;$i<=count($logArray);$i++)
{
$dat[$i] = substr($logArray[$i],0,10);
print $dat[$i].'<BR>';
}
結果はちゃんとprintされているんですが、
Notice: Undefined offset: 80 C:\Program Files(略) on line 24
っていうのがでるんです。
24行目は$dat[$i] = substr($logArray[$i],0,10);です
0964nobodyさん2008/11/21(金) 05:54:07ID:???
$logArray = explode("\n",$log);



$logArray = @explode("\n",$log);
0965nobodyさん2008/11/21(金) 07:11:18ID:???
$i<count($logArray)

ループ条件はこうちゃいますのん?
0966nobodyさん2008/11/21(金) 07:17:08ID:???
>>963
大域(forの外)で$datは宣言されてるの?
$dat = array();
あとループ条件は>>965
ちなみにエラーが出たラインの1行前(つまり23行目)に原因がある場合があるから
付近のソースを出すのが望ましい
レス数が950を超えています。1000を超えると書き込みができなくなります。