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

【PHP】下らねぇ質問はここに書き込みやがれpart20

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん2006/04/28(金) 04:12:33ID:???
PHPに関するくだらねぇ質問用スレです。
ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。

まず読め【PHP マニュアル】
http://www.php.net/manual/ja/

本スレ【PHP】質問スレッドpart34【php】
http://pc8.2ch.net/test/read.cgi/php/1142903954/

【PHP】下らねぇ質問はここに書き込みやがれ Part19
http://pc8.2ch.net/test/read.cgi/php/1144513878/

過去スレは>>2-3あたり
0885nobodyさん2006/05/22(月) 08:50:14ID:???
フォルダに突っ込んであるファイルを全部requireするような機能がないので

foreach( scandir(INCLUDE_DIR) as $filename){
if(!is_dir($filename)){
require_once(INCLUDE_DIR.$filename);
}
}

みたいにやってるんですが、こんな感じの関数とかってありませんか?
0886nobodyさん2006/05/22(月) 09:12:27ID:QKaBTlkn
データの中から、χ行目だけ読み込んで、
上書きまたは削除というのはできませんか?
そういう関数はありませんか?
0887nobodyさん2006/05/22(月) 09:16:37ID:???
>>886
出来るけどそういう関数は無い。
DBが使うのが手っ取り早い
0888nobodyさん2006/05/22(月) 09:20:46ID:QKaBTlkn
>>887
やっぱり、ループで一行ずつ読み込まないといけないですよね。
DBを使わずに作成したいのですが、データが大量になるとつらいです?
0889nobodyさん2006/05/22(月) 10:13:56ID:???
>>888
大した技術も持ってないので全然自信ないけど、もし自分がやるとしたらこんな感じにすると思う…というのを書いてみた↓
間違いのご指摘とか大歓迎。

$buf_ary = array();
$fp = @fopen($path, 'r+');
flock($fp, LOCK_EX);
while ($line = fgets($fp)) {
  該当行に来たら$lineの中身を変更する処理
  $buf_ary[] = $line;
}
ftruncate($fp, 0);
rewind($fp);
fputs($fp, implode('', $buf_ary));
fclose($fp);

例えばこれが掲示板なら、データファイルはある程度の大きさで分割する。
また、単なる表示処理とかにはキャッシュを使い、データファイルを読みに行くような処理にはしない。
08908892006/05/22(月) 10:18:41ID:???
あ、削除もあるのか。

$buf_ary = array();
$fp = @fopen($path, 'r+');
flock($fp, LOCK_EX);
while ($line = fgets($fp)) {
  該当行に来たら$lineの中身を変更/削除する処理
  if ($line != '') { $buf_ary[] = $line; }
}
ftruncate($fp, 0);
rewind($fp);
fputs($fp, implode('', $buf_ary));
fclose($fp);

全然自信ないけどどうでしょう?
0891nobodyさん2006/05/22(月) 11:13:30ID:???
>>890
俺ならデータがかなり大きいと予想される場合は
固定長のレコードを使って、小さいならvar_export()とかのシリアライズ系
の関数をつかってすませてしまうかな。

まぁ、PHPで固定長のレコードを持つファイルを扱ったことなんて
ないんだけどね。
0892nobodyさん2006/05/22(月) 11:30:12ID:???
↑意味が分からない。
>>890みたいにソースでも晒してくれれば良いのに。
0893nobodyさん2006/05/22(月) 12:07:12ID:???
>>892
1行の長さが固定のファイルならfseek使って
ダイレクトに行単位の読み込みや上書きができるからそういうことじゃ?
0894nobodyさん2006/05/22(月) 12:10:19ID:???
>>893
そういう説明なら分かる。解説ありがと。
固定長なんてカウンタぐらいしか扱った事ないなー
08958902006/05/22(月) 12:15:08ID:???
で、自分の書いたソースってどんなでしょう?>識者の方々
「KENT WEB」とか見てperlから独学で入ったクチで、Cとかの経験は全く無しなんで自信ないのよね。
要するに基礎がおろそかっていうか。

今はperlなんて忘れちゃったけど、「KENT WEB」見て勉強してた当時のソースは、
なんか配列にデータ全部読む→配列を処理する→ファイルに書き込む
みたいな事をしてた気がする。アレは駄目だよね?
0896nobodyさん2006/05/22(月) 12:20:34ID:???
perlはもう忘れたので↑をもしPHPで書くとこんな感じ。

$data_ary = @file($path);
foreach ($data_ary as $key => $value) {
  なんか処理をごじょごじょ
}
$fp = @fopen…以下書き込み処理

↑これはやっぱりマズイだろと思い>>890を考えてみた。
MySQLばっかやってるので、ファイルベースの管理に疎い俺に勉強させて下さい。
0897nobodyさん2006/05/22(月) 12:24:46ID:???
>>890
ftruncate($fp, 0);
rewind($fp);
fputs();
よりも
rewind($fp);
fputs();
ftruncate($fp, ftell($fp));
の方が早いらしい

自分で確認したことはないので本当かどうかは知らないが
08988902006/05/22(月) 12:41:12ID:???
>>897
どもです。
早いか遅いかというよりもむしろ、
ftruncate($fp, 0); って要するにファイルの中身を一度空っぽにしてしまうっていう事ですので、
もし何らかの原因でファイルロックに失敗してた場合、中身が全部消えてしまう可能性がありますよね。

書かれている
rewind($fp);
fputs();
ftruncate($fp, ftell($fp));
の場合、データの長さが変になる可能性はあっても、中身が全部消えてしまう事は無いのではないかと思います。

こんな書き方もあるんですね。勉強になりました。有難う御座いました。
0899nobodyさん2006/05/22(月) 13:10:19ID:???
>>895
ネ申KENT巨匠云々はどーだっていいが、perlとphpは脳内で確実に切り離して考えろ
phpはperlよりJavaScript寄りで脊髄反射で書ける代物から勉強するが良い
と、->のアローを使わないし今一存在意義の分からない俺が言うのだから
説得力なんて丸っきし無いのだけどな
0900nobodyさん2006/05/22(月) 13:36:22ID:???
>>890
ロックに間違いはないし、この1つのファイルだけでやりくりするならこれでいいと思う。

問題点としては、
ファイルの内容を全てメモリ上にロードしていることに対するシステムへの負荷
これはまあ、よほどでなければ無視できる。
それから、インデックスや、別のログファイルなど、
他のファイルを読み書きすることになった場合の整合性かな。

>>895
メモリ上に全て読み込んでいるからKENTとやってることは実質同じだよ。
KENTのは読み込みと書き込みで別々になってるけど
処理全体をロックして堅牢性を確保してる。
ロック時間が長すぎない分にはあの書き方の方がわかりやすいと思う。
0901nobodyさん2006/05/22(月) 13:40:51ID:???
そーいやPHPのロック(flock)ってどこまで信用していいん?
Perlのロックはサーバによっては意味なかったり、
アンロックとファイルクローズの間隙に処理されるからアンロックせずにファイルクローズしたりと
あんまり信用できなかったけど・・・
0902nobodyさん2006/05/22(月) 14:01:52ID:???
全部読み込んでしまうコードのほうが処理に区切りがでてきて
追いかけやすいし、改変もしやすいかもしれない、
という利点もある。リッチプログラミングってやつだな。
スクリプト言語なんてリッチ以外の何者でもないし〜、
ってことで俺は人間の理解しやすさ重視で組むように昔方針変更した。
それでもソースコードレベルでの最適化を頑張るのも無駄じゃないし、
その人の方針しだいだよな。
09038902006/05/22(月) 14:01:53ID:???
>>899
切り離すっていうか、perlとphpしかやった事ないしもうperl自体忘れちゃってるので何とも。
perlならゴチャゴチャ関数書いてたのが初めから何でもかんでも用意されてて、
その関数通せば1行で終わり…php始めた頃はそういうところに感動しましたね。

>>900
>ファイルの内容を全てメモリ上にロードしていることに対するシステムへの負荷
>それから、インデックスや、別のログファイルなど、
>他のファイルを読み書きすることになった場合の整合性かな。
ここら辺を考えるのが面倒で、mysqlに逃げちゃうんですよね。。。

>>896に書いたソースでは、A・B別々の人がほぼ同時に書き込み処理を行った場合、先に書いた人の内容が
消えてしまう可能性がありますよね?>>900に書いたソースならそれは無いと思うですが、認識として間違ってます?

>>901
その点自分も結構疑問なのですが、
例えば1日300万以上回るカウンタ(データの長さは固定長になるようにしてる)で1年以上一度も壊れた事ないです。
0904nobodyさん2006/05/22(月) 14:07:33ID:P0gT7hBy
フォーム入力の際に、タグを無効かしたいので、確認画面で
$text = htmlspecialchars($_POST["text"]);
を入れました。

それで、確認画面ではタグが無効化しているのですが、そのまま登録すると
表示の画面ではタグが有効になっています。

そこで改めて確認の画面で
<?= htmlspecialchars($text);?>

としたのですが、今度はテキストエリアで入力した改行(<br>)が表示されてしまいました。

2chのフォームもそうですが、改行(<br>)は画面に表示させずに
その他のコードは完全に無効にするにはどうしたらいいのでしょうか?
0905nobodyさん2006/05/22(月) 14:16:04ID:???
>>903
>A・B別々の人がほぼ同時に書き込み処理を行った場合

合ってる。
だから、読み書きを分ける場合は処理全体をロックしていれば大丈夫。
俺なら、ロック用ファイルを別に用意してそこにflockするか
rename方式でやるかな。
09068902006/05/22(月) 14:19:04ID:???
また別件で質問なのですが、file()やfile_get_contents()等のファイル一気に読み取り系の関数って、
共有ロック処理(flock($fp, LOCK_SH)と同等の処理)されてるんでしょうか?
09078902006/05/22(月) 14:23:10ID:???
>>905
どもです。
つまり、ロック用ファイル=今処理中ですよと認識する為のフラグ みたいなもので、

書き込み中でそのファイルが存在する時は、読み取り処理を行えないようにする。
読み込み中でそのファイルが存在する時は、書き込み処理を行えないようにする。

という具合にすればOKって事ですよね?
0908nobodyさん2006/05/22(月) 14:35:52ID:???
>>904
あたりまえ
マニュアル嫁
09098902006/05/22(月) 14:39:20ID:???
>>904
自分のせいで埋もれてしまうと申し訳ないので回答しようと思ったのだけど、
いまいち質問の意味が掴みきれないので↓で勘弁して下さい。

仮に改行コードが"\n"で統一できてると仮定します(その方が説明しやすいので。実際には環境により異なります)

$text = $_POST['text'];
$text_escape = htmlspecialchars($text); //※1
$text_disp = str_replace("\n", '<br>', $text_escape); //※2
※$text_escapeとか$text_dispを用意する必要はないけど、分かりやすいかと思い敢えてそうしています。

という順番で処理すれば、改行(=\n)は<br>となり、その他のHTMLタグはエスケープ処理されます。
※1と※2の処理が逆になると、どうなるか分かりますよね?問題が起こってるのはそういう理由だと思います。

連投すみませんでした。
しばらく時間をおきます。
0910nobodyさん2006/05/22(月) 14:41:54ID:???
>>904
最後2行に対し答えるとすると、

$text = htmlspecialchars($_POST['text']);
$text = str_replace("<br>","<br>",$text);

ってか、処理の流れがヘンなのが一番の問題かも。
09119102006/05/22(月) 14:43:11ID:???
>>910
おお、やっちまったorz

$text = htmlspecialchars($_POST['text']);
$text = str_replace("&lt;br&gt;","<br>",$text);
0912nobodyさん2006/05/22(月) 14:48:26ID:???
>>907
合ってるような合ってないような。
flockでのやり方は、コードにするとこんな感じ。

$lock = fopen('lockfile', 'w');
flock($lock, LOCK_EX);

//読み書き処理いろいろ

fclose($lock);

これだけ。
ポイントは処理中1ファイルを開きっぱなしにすることだけかな。
lockfileはサイズ0でも問題ないし、別に消す必要もない。
PHPはスクリプトが終わると勝手に閉じてくれるから
fcloseを忘れてもロックは残らないし、簡単なわりに結構いいよ。
09139042006/05/22(月) 15:03:16ID:???
みなさん、出来ました。勉強になりました。
ありがとうございました
0914nobodyさん2006/05/22(月) 16:01:04ID:???
編集するファイルを直接ロックするときは結構面倒

$fp = fopen($file, 'ab+');
flock($fp, LOCK_EX);
stream_set_write_buffer($fp, 0);
rewind($fp);
ftruncate($fp, 0);
// 書き込み
// ...
ftruncate($fp, ftell($fp));
flock($fp, LOCK_UN);
fclose($fp);

たしか、こんな感じにしないとまずいかったと思う
ab+モードのときは rewind() はいらないんだっけな
0915nobodyさん2006/05/22(月) 16:14:51ID:???
素人です。

フォームに入れた値を、phpからmySQLのDBに送るっていうのを作ったのですが
送信後にF5、つまり更新すると空の内容がDBに送られてしまいます。

sql_closeを入れても同じです。

どうやったら、解決するでしょうか?
09169152006/05/22(月) 16:17:16ID:???
sry

sql_closeじゃなくてmysql_closeです。
ついでにソース

$con = mysql_connect("","","") or die(mysql_error());
$con_tbl = mysql_select_db("");
$query = mysql_query("INSERT INTO result_tbl () VALUES(");
mysql_close($con);
0917nobodyさん2006/05/22(月) 16:32:47ID:???
>>915
フォームからの入力値をチェックして不適切(空)ならエラー処理
0918nobodyさん2006/05/22(月) 16:34:36ID:???
>917
やっぱ、それしか無いんですかね・・・
もっと簡単に出来るかなと思ったのですが。

ありがとうございました。
0919nobodyさん2006/05/22(月) 16:36:05ID:???
ブラウザのリロードは、同じ内容を同じように送信するのが普通だよな。
だから、2重送信をブロックするロジックを自分で考えなきゃいけないんだよ。
Submitボタン連打だともっと酷いデータが送られてくるときもあるからな。
こっちも忘れんな。
0920nobodyさん2006/05/22(月) 16:43:09ID:???
>>915

フォームのアクションを別ファイルにして、1.php → 2.php へPOST
<form method=post action=2.php>

そこから元ファイルに飛ばせばフォームデータ消えるから、F5更新しても大丈夫
header("Location: http://example.com/1.php");
09219152006/05/22(月) 17:32:49ID:???
>919,920
ありがとうございます。

一度917さんのソリューションでやってみたんですが、解決しなかったっす
同じ内容を2度送る場合にエラー出すように設定しても、やはり普通に送られてしまいました。
フォーム側の$_POST['']をクリアするようにしてもうまく動かなかったので
920さんのでやったら、解決しました。一番簡単で確実かもしれないっすね。
ただ、別問題でなぜかフォームの一つが動作しなくなったのは萎えてきましたが。

とりあえず、みなさんありがとうございました。
0922nobodyさん2006/05/22(月) 17:49:31ID:???
inc.php
<?php
function htmlheader($title){
echo <<<HOGE
<html>
<head>
<title>{$title}</title>
</head>
<body>
HOGE;
}
function htmlfooter(){
echo <<<HOGE
</body>
</html>
HOGE;
}
?>

test.php
<?php
include("inc.php");
htmlheader($title);
//ここが中身
htmlfooter();
?>
こんな風にするのはよくあると思いますが、inc.phpではhtmlheader(),htmlfooter()って関数で定義せずに例えば、$htmlheader,$htmlfooterって変数を定義。
それをincludeしてtest.phpのなかで、そのときに応じて$titleを与えて(上書き)やるみたいなことは出来ないでしょうか?
参照渡しとか可変変数とかを使えばなんとなく出来そうな気がするんですが。
0923nobodyさん2006/05/22(月) 17:53:43ID:???
echo しないで関数の返値にすれば?
0924nobodyさん2006/05/22(月) 17:54:40ID:???
もう一つ。
mysql&phpなんですが、特定のレコードのフィールド(数値int(11))を一番効率よくカウントアップするにはどんな方法をとるのが良いでしょう?
最初にselectして値をとって、それを変数に入れて++したものをupdateするしかないんでしょうか?
update文一発で出来る方法を以前見かけたような気がするんですが。
0925nobodyさん2006/05/22(月) 17:57:54ID:???
>>923
なるほど。関数の実行結果を変数に入れちゃう訳ですね。
自分はけっこう大きな固まりでヒアドキュメントを使いたいので変数にしちゃいたかった訳です。
ヒアドキュメントの直前で
$htmlheader = htmlheader($title);
とやるわけですね。
0926nobodyさん2006/05/22(月) 18:00:00ID:???
>>925はもちろんfunctionの中身をechoじゃなくて変数にしてreturnにするのは承知しております。
0927nobodyさん2006/05/22(月) 18:12:40ID:???
>>924
AUTO_INCREMENT属性。
0928nobodyさん2006/05/22(月) 18:16:23ID:???
>>927
AUTO_INCREMENTは承知しておりました。
いろいろためしたとこ、事前のselectでの取得は不要、これで逝けそうです。
UPDATE `tablename` SET `count` = `count` + 1 WHERE `id` = 1;
ありがとうございました
0929nobodyさん2006/05/22(月) 19:09:56ID:???
すみません、セッションを使ったログイン・システムを作ったのですが、
ログイン後に操作をしない(サーバと通信をしない)時間が数分〜十数分続くと、
勝手にログアウトしてしまいます。 厳密に計ったわけではありませんが、20分ももたないようです。

ブラウザを閉じたわけでもないですし、session.gc_maxlifetimeは1440あります。
明示的にログアウト処理をしない限りログイン状態が続くようにしたい(mixiのように)のですが、
どこの設定をいじれば良いのでしょうか・・・。
0930nobodyさん2006/05/22(月) 19:13:25ID:ZjR2V7y0
PHP4 + Postgresの環境でWebアプリ作ってます。
あるテーブルから普通にデータ取得して、HTMLでテーブル作って表示してます。
データの件数が多くなってしまい、表示に時間がかかるようになりました。
よくある「次のページ」リンクをつけて、数回に分けて表示したいと思います。
やり方でセオリーとかありますか?
自分で考えたのは普通に、start_numみたいな変数をhiddenに持たせて、
データを取得する時、ループさせる中でstart_numから30回分を表示してあとはスルーみたいな感じです。
0931nobodyさん2006/05/22(月) 19:29:23ID:???
>>930
limitとoffset使って表示件数分だけselectした方がよろしいかと
0932nobodyさん2006/05/22(月) 20:02:16ID:80zZuoVH
$textには、

* H1要素
段落段落段落...
** H2要素
段落...

という値が代入されているとします。
先頭が「*」で始まる文字列を見出しタグで括りたいのですが、これを実現するための関数はありますでしょうか?
0933nobodyさん2006/05/22(月) 20:41:29ID:???
$line = explode("\n", $test);
$int = count($line);
for($i=0;$i<$int;$i++){

if(strpos($line[$i], '**') === 0){
$line[$i] = '<h2>'.substr($line[$i], 2).'</h2>'
}elseif(strpos($line[$i], '*') === 0){
$line[$i] = '<h1>'.substr($line[$i], 1).'</h1>'
}
//↓ならh1〜h*まで
//if(preg_match("/^([\*]+)(.+)$/", $line[$i], $ast)){
//$line[$i] = '<'.strlen($ast[1]).'>'.$ast[2].</'.strlen($ast[1]).'>';
//}

}
0934nobodyさん2006/05/22(月) 20:43:10ID:???
シングルクォータが抜けてら...
'<'.strlen($ast[1]).'>'.$ast[2].'</'.strlen($ast[1]).'>';
09359322006/05/22(月) 20:46:40ID:80zZuoVH
>>933
ありがとうです。
preg_match()を用いるのだとは思っていたのですが、応用することができませんでした。

まだまだ私は勉強が足りないみたいです。
0936nobodyさん2006/05/22(月) 20:47:27ID:???
うん。足らなすぎ。
0937nobodyさん2006/05/22(月) 20:47:44ID:???
>>931
ありがとうございます。それでいきます。
0938nobodyさん2006/05/22(月) 20:53:27ID:???
ぐだぐだですまん
最後に$test = implode("\n", $line);

今気づいた・・
$test = preg_replace("/([\*]+)([^\n]+)\n/", "<h".strlen("\\1").">\\2"."</h".strlen("\\1").">\n", $test);
0939nobodyさん2006/05/22(月) 20:58:08ID:???
$hoge =0; もしくは $hoge ="0";
echo $hoge;
上記のようにしたときに$hogeが空の状態で表示されてしまうのですが
どのようにしたら0と表示するのでしょうか?
おそらくiniの設定かなと思うのですがどこを変更すればいいのかが分かりません
使用しているバージョンはphp4.4.1です
0940nobodyさん2006/05/22(月) 20:58:47ID:???
>>932
面白いから読んどけ
ttp://www.kt.rim.or.jp/~kbk/regex/regex.html
ttp://www.din.or.jp/~ohzaki/regex.htm

スレ違いごめん
0941nobodyさん2006/05/22(月) 21:01:51ID:???
>>939
printf
0942nobodyさん2006/05/22(月) 21:24:44ID:???
>>941
ありがとうございます
とりあえず表示は出来ました
しかし以下のような使い方をする時にはどのようにしたらいいのでしょうか?
$array = array("0","1","2");
for($i=0;$i<count($array);$i++){
printf("%d",$array[$i]);
}
$iが0の時の値が表示できません
よろしくお願いします
0943nobodyさん2006/05/22(月) 21:46:29ID:HMN8IoOb
4.4.3はいつ出るんですか
0944nobodyさん2006/05/22(月) 21:52:44ID:???
プログラム板から誘導されてきました。

PHPとMySQLでファイルアップロード機能つきの掲示板作ってるんですけど
ファイルをpublic_html内にPHPでアップロードしたら誰でも直接アクセスできますよね?
ログインした人だけアクセスできるようにって可能ですか?
DBに入れようかと思ったんですがMySQLではサポートされてないみたいなので
どうしようか悩んでます。

よろしくお願いします。
0945nobodyさん2006/05/22(月) 21:56:43ID:???
>>942
その前に、
$a=0;
echo $a;
で何も出ないってのは、ちょっと変じゃないか?
なんか勘違いしてないか?
var_dump($a);
はどうなる?
0946sage2006/05/22(月) 22:00:52ID:ie3bIX/1
オレ様作成の曲をアップしてあんだけど、スゲェカッコ曲だから
勝手に直リンされてるんだけど、これ拒否る方法ないかねぇー。
WMPで直リンクされてんだけど、リファラー吐かないから、.htaccess
でも拒否れないし。。。クッキーも使いたくない。
なんかいい方法ある?
0947nobodyさん2006/05/22(月) 22:04:25ID:???
>>944
public_html 外に置けば?
0948nobodyさん2006/05/22(月) 22:07:09ID:???
>>947
目から鱗です。
ダウンロードする時も外のディレクトリから持ってくればできそうですね。
試してみます。ありがとうございました。
0949nobodyさん2006/05/22(月) 22:24:46ID:???
俺の借りているレンタル鯖、safe_modeがonなんだが、これを.htaccessでOffにできると言い張っています。

俺の認識だと無理だと思うんだけど、実際どうなんですか?教えて下さいな
0950nobodyさん2006/05/22(月) 22:24:57ID:RlV2K8v8
超初心者なんですが『ECHO』で表示させたテキストの
色・サイズなどを変更は、どうすれば良いんでしょうか?
0951nobodyさん2006/05/22(月) 22:36:09ID:???
BIGECHO
0952nobodyさん2006/05/22(月) 22:36:58ID:???
>>950
HTMLをechoで出力する
0953nobodyさん2006/05/22(月) 22:39:58ID:???
echoとprintの違いってなんなんでしょうか?
0954nobodyさん2006/05/22(月) 22:41:42ID:???
>>949
ttp://www.php.net/manual/ja/ini.php
0955nobodyさん2006/05/22(月) 22:46:14ID:???
>>953
echoはキー4回押下
printは5回押下
09569322006/05/22(月) 22:48:35ID:???
>>938
すみません、こんなのでいいのでしょうか?

$file  = file ("./text.inc");
$line  = explode ("\n", $file);
$file  = explode ("\n", $line);
$int   = count ($line);
$file  = preg_replace ("/([\*]+)([^\n]+)\n/", "<h" . strlen("\\1") . ">\\2" . "</h" . strlen("\\1") . ">\n", $file);

for ($i=0;$i<$int;$i++) {
        if (strpos($line[$i], "**") === 0) {
                $line[$i] = "<h2>" . substr ($line[$i], 2) . "</h2>";
        } elseif (strpos($line[$i], "*") === 0) {
                $line[$i] = "<h1>" . substr ($line[$i], 1) . "</h1>";
        }
}

echo $line[$i];
0957nobodyさん2006/05/22(月) 22:50:17ID:???
>>954

無理ってことデスヨネ
0958nobodyさん2006/05/22(月) 23:00:02ID:???
>>957
safe_mode = PHP_INI_SYSTEM
PHP_INI_SYSTEM = php.ini または httpd.confで設定可能なエントリ

どこのサーバか知らんが、言われたとおりにやってphpinfo()してみたら?
0959nobodyさん2006/05/22(月) 23:53:56ID:???
>>958
オーケー兄弟。ありがとう

指示通りやってもphpinfoの結果はOnのままだった。
サポートに(*゜Д゜)ゴルァ!してくる
0960nobodyさん2006/05/23(火) 00:27:30ID:???
>>956
え? file()はファイル内容を一行ずつ配列に格納する関数なので
explodeで分割する必要は無いんじゃないの?
09619322006/05/23(火) 00:34:51ID:???
わぉ!

<?php
$lines  = file ("./text.inc");
$int    = count ($lines);
$lines  = preg_replace ("/([\*]+)([^\n]+)\n/", "<h" . strlen("\\1") . ">\\2" . "</h" . strlen("\\1") . ">\n", $lines);

for ($i=0;$i<$int;$i++) {
    if (strpos($lines[$i], "**") === 0) {
        $lines[$i] = "<h2>" . substr ($lines[$i], 2) . "</h2>";
    } elseif (strpos($lines[$i], "*") === 0) {
        $lines[$i] = "<h1>" . substr ($lines[$i], 1) . "</h1>";
    }
echo $lines[$i];
}
?>

出来たです。
あとは見出し要素以外の文書構成節「段落」をpタグで括るようにすればいいのですね。

ありがとうございました(^^
0962nobodyさん2006/05/23(火) 01:59:05ID:???
>>961
このほうがシンプルじゃないか?
まあ、解決したみたいだから、どうでもいいけどw

$fp = fopen("test.txt","r");
while ($buf = fgets($fp,1024)) {
$buf = trim($buf);
if (substr($buf,0,1) == '*') {
$buf = preg_replace("/^(\*)*(.+)$/e", "'<h'.strlen('\\1').'>\\2</h'.strlen('\\1').'>'", $buf);
} else {
$buf = "<p>{$buf}</p>";
}
echo $buf."\n";
}
fclose($fp);
0963nobodyさん2006/05/23(火) 02:26:43ID:???
>>962
それ正規表現でマッチングさせて置き換えする必要ってあるのか?
0964938 2006/05/23(火) 07:57:36ID:???
>>961
はじめ行で分割してやったけど
正規表現で一発で置き換えすればいいかと思った
その方法だとpreg_replaceはいらないよ
配列にreplaceは意味ない希ガス
0965nobodyさん2006/05/23(火) 08:18:34ID:???
>>929
php.iniの他のセッション関連の設定をうpしる。
09669422006/05/23(火) 11:08:53ID:5evz5UIt
>>945
遅くなって申し訳ないです。
教えていただいた方法で書き出した所
int(0)と出ました。
0967nobodyさん2006/05/23(火) 11:47:33ID:???
>>932

<?php

is_resource($fop = @fopen($log = "./test.txt","r")) or exit("Error: ".$log." を開けませんでした。");

$dat = "";

while(is_string($buf = fgets($fop,1024))){

$dat.= ($len = strspn($buf,"*")) > 0 ? "<h".$len.">".trim(substr($buf,$len))."</h".$len.">\n" : "<p>".trim($buf)."</p>\n";
continue;

}

fclose($fop);
exit($dat);

?>
0968nobodyさん2006/05/23(火) 12:02:16ID:???
改行ウザイアルネ
0969nobodyさん2006/05/23(火) 13:27:20ID:???
質問です

PHPでメールとメールの添付ファイルを受信する為には
どのような方法をとれば良いのでしょうか…
0970nobodyさん2006/05/23(火) 13:32:45ID:???
おk。まずは調べることから始めてみようか。
0971nobodyさん2006/05/23(火) 13:37:39ID:???
まず、メールを取り込む方法を決める。これは通常はPOPかIMAP、あるいは
MTA(みたいなやつ)からのパイプ起動の三択。
で、次にそのメールのMIME構造を解釈するとメール本文と添付ファイルが得られる。
0972軟式PHP2006/05/23(火) 13:47:20ID:???
みんな優しいな
0973nobodyさん2006/05/23(火) 14:02:32ID:???
俺には冷たいのにな
0974nobodyさん2006/05/23(火) 14:23:04ID:???
.forwordで転送。
0975nobodyさん2006/05/23(火) 14:32:39ID:z6MA0Zs/
PHPにはJMailみたいなライブラリはないのか?
0976nobodyさん2006/05/23(火) 15:09:10ID:???
jmail ってwebアプリじゃないの?
0977nobodyさん2006/05/23(火) 15:41:54ID:???
http://repu.nttrd.com/repu.html?sk=PHP&u1=0&u4=0&d1=&d2=&d3=&df1=1&df2=1&df3=1&bf=0
0978nobodyさん2006/05/23(火) 17:17:20ID:???
>>959
ヒント:CGIバイナリPHP
0979nobodyさん2006/05/23(火) 18:09:44ID:???
ファイルロックで

$lockfp = fopen($lockfile,"w");
flock($lockfp, LOCK_EX);
$fp = @fopen($file,"a");
@fputs($fp,$date);
@fclose($fp);
flock($lockfp, LOCK_UN);
fclose($lockfp);

このようにしたが、logファイルに書き込みが出来なくなった。なぜ?
0980nobodyさん2006/05/23(火) 18:30:36ID:???
short_open_tagってOn/Offどっちにしてます?
0981nobodyさん2006/05/23(火) 18:32:53ID:???
>>979
>@fputs($fp,$date);

この行にタイプミスがあるのではないかとエスパー的にレスしてみる
0982nobodyさん2006/05/23(火) 18:33:26ID:???
>>979
logファイルってどっちだよ
error_logのことか?
0983nobodyさん2006/05/23(火) 18:34:44ID:???
バラ,名詞,一般,*,*,*,*,バラ,バラ,バラ
の,助詞,連体化,*,*,*,*,の,ノ,ノ
つぼみ,名詞,一般,*,*,*,*,つぼみ,ツボミ,ツボミ

みたいなCSVデータが多量にある場合、プログラム的にはどんな処理が軽いんでしょうか?
上記の場合「バラ」って言葉が複数回出る可能性があるので、何回出たかカウントしたかったりします。
配列全部入れて配列を検索が楽そうなんですが、多量になると処理的に厳しいですよね・・。
0984nobodyさん2006/05/23(火) 18:47:45ID:???
>>983
一番軽いのはexit()かunset()かなあ・・・

そもそも何をしたいのか判らんのだけど。
カウント?検索?データはどこにある?(変数?ファイル?DB?)
情報が小出しすぎて(不足で)どうとでも答えられそうな
0985nobodyさん2006/05/23(火) 18:55:18ID:???
>>983
いったいなにをしたいんだ?
レス数が950を超えています。1000を超えると書き込みができなくなります。