【PHP】下らねぇ質問はここに書き込みやがれpart20
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/04/28(金) 04:12:33ID:???ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。
まず読め【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あたり
0140137
2006/05/01(月) 02:09:05ID:???レス有難うございます。
$lines = file("hoge.txt");
fputs(ファイルポインタ,"test");
fputs(ファイルポインタ,$lines);
出力結果を見ると
testは出力されるのですが、$linesはArrayと表示されてしまいます。
あと、fopenの第二引数にr+を指定すると挿入されてしまいます。
確かに挿入できるか質問しましたので質問の仕方が悪かったです。
これは、
例えば、hogehogehogeという内容のhoge.txtがあった場合、
$file=fopen("hoge.txt","?");
fputs($file,"HOGE");
というコーディングを書いた場合、
"HOGEhogehogehoge"という出力結果が欲しいです。
0141nobodyさん
2006/05/01(月) 02:27:22ID:???file()をfile_get_contents()にするといいよ。
基本的にファイルに対して「途中に内容を増やす」というのは無くて、
元ある内容に上書きするか末尾に追加するしかないっす。
(元々のデータの位置はどうやっても変わらない)
なので挿入しようと思ったら、1度読み込んだ上で
ファイル全体を出力しなおす、という手段が必要になる。
0142137
2006/05/01(月) 02:41:17ID:???file()は行毎の配列を戻り値とするという事が今解りました。
以下の方法で、やりたい事ができました
ありがとうございました。
$arr = file("hoge.html");
$file=fopen("hoge.html","w");
flock($file,LOCK_EX);
fputs($file,"test\n");
foreach ($arr as $line) {
fputs($file ,$line);
}
flock($file,LOCK_UN);
fclose($file);
>>141
レスありがとうございます
file()とfile_get_contents()、何が違うんでしょうか?
マニュアル引用
string file_get_contents ( string filename [, bool use_include_path [, resource context [, int offset]]] )
offsetで指定した場所から開始し、 ファイルの内容を全て文字列に読み込むこと以外はfile()と等価。
つまり、ファイルを最初から全部読み込む場合は、file()で大丈夫ですかね?
0143nobodyさん
2006/05/01(月) 02:54:05ID:???file()は1行ごとに分解した配列で取得。
file_get_contents()は全部まとめて1個の文字列として取得。
0145nobodyさん
2006/05/01(月) 15:46:56ID:???session.save_handler files
session.save_path no value
の状態で、セッションを利用できているのですが、
この場合、セッションファイルはどこに保存されていますか?
0146nobodyさん
2006/05/01(月) 16:07:35ID:???インストール出来ないのは私だけ?
0149nobodyさん
2006/05/01(月) 16:16:10ID:???まだ生きてたんだ。namazuがバージョンアップしてから使えるかわからずほったらかし。
でも、前(PHP4.1?とnamazu2.0.12?あたり)は素直にインスコできたよ。
0150nobodyさん
2006/05/01(月) 16:32:43ID:???去年の11月にphp-usersに投稿にあったよ。
ttp://ns1.php.gr.jp/pipermail/php-users/2005-November/028127.html
0151nobodyさん
2006/05/01(月) 22:10:25ID:???ありがとうございます。
事例と同じでautoconf(2.13,2.53,2.59)がインストールされています。
同様にすると解決出来るかもしれませんね。
リンクして今後に弊害が出ると思うとちょっと怖いのであきらめます。
0152nobodyさん
2006/05/01(月) 23:12:18ID:???preg_matchで↑より16進数の簡単な表現ない?
0155nobodyさん
2006/05/01(月) 23:48:06ID:???0157nobodyさん
2006/05/02(火) 07:22:20ID:???0158157
2006/05/02(火) 07:23:29ID:???エラーが発生した時点でスクリプトを強制終了して、空白のHTMLや
CGI/Perlみたいに 500 Internet Server Error を返したいんです。
※1
ini_set("error_reporting", E_ALL | E_STRICT)
0159152
2006/05/02(火) 07:41:22ID:???preg_matchでマッチした部分を取り出すのが目的なので...
^とか$使って紛らわしくしてましたね
でもctype_xdigit知らなかったのでサンクス
0160152
2006/05/02(火) 07:51:13ID:???ttp://jp.php.net/manual/ja/function.set-error-handler.php
まだ詳しく読んでないけどこれ無理かな?
0162nobodyさん
2006/05/02(火) 14:25:42ID:???.php .cgi .html
の3つだとそれぞれ違いがあるのでしょうか?
0163nobodyさん
2006/05/02(火) 14:37:56ID:???全部同じように処理しようと思えばできるし、.htmlをPHP、.phpをCGI、.cgiをHTML出力にすることもできる。
0166nobodyさん
2006/05/02(火) 18:36:18ID:???返すのはどうしたらよいですか?
0167166
2006/05/02(火) 18:49:20ID:???return $return_array;
ありがとうございました。
0168nobodyさん
2006/05/02(火) 19:56:21ID:???0169nobodyさん
2006/05/02(火) 23:39:23ID:rocsvmuHうざいよ
0170nobodyさん
2006/05/02(火) 23:45:46ID:???0171nobodyさん
2006/05/02(火) 23:48:27ID:???0172nobodyさん
2006/05/03(水) 01:18:16ID:???0173nobodyさん
2006/05/03(水) 01:27:38ID:???それより、死んで。
0174nobodyさん
2006/05/03(水) 02:20:40ID:Zf4m7aAt0175nobodyさん
2006/05/03(水) 03:52:15ID:???○ ← ラジオボタン
qst-------------------------------- ○ opt1 ○ opt2 ○ opt3
qst-------------------------------- ○ opt1 ○ opt2 ○ opt3
qst-------------------------------- ○ opt1 ○ opt2 ○ opt3
こんな感じでループさせたいんですけど・・・。
今の状態では、
qst-------------------------------- opt1 opt2 opt3
qst-------------------------------- opt1 opt2 opt3
qst-------------------------------- opt1 opt2 opt3
というようにqst,opt1,opt2,opt3を行ごとにループさせて表示することは出来ています。
ラジオボタンを表示するには、qstとoptを別に取り出してoptの前にラジオボタンを表示するタグをくっつけてループさせるしかないんでしょうか?
説明下手ですいません;;
0176nobodyさん
2006/05/03(水) 03:55:33ID:???0177nobodyさん
2006/05/03(水) 03:59:34ID:???普通にまとめて取り出して、表示するときにラジオボタンのタグをくっつけて表示するだけ。
ぶっちゃけ「めちゃめちゃ当たり前」のことでしかないので、話だけ聞いてると
どこで困ってるのか想像もできない。何故そんなので困る??
まず、今はどういうプログラムで取り出しと表示をやってるのか具体的に書け。話はそれからだ。
0178175
2006/05/03(水) 04:15:58ID:???--------------------------------------------------------------------qst,ans1,ans2,ans3を表示
$testNo = $_REQUEST["test"]; //テスト問題を取得
$gateway = new TestGateway(); //TestGatewayクラス内で下のgetQuestion($test)を定義
$table = $gateway->getQuestion($testNo);
$dataview = new DataTableView($table);
$html = $dataview->render();
print_r($html);
-----------------------------------------------------------------------------qst,ans1,ans2,ans3を取り出す
public function getQuestion($test)
{
$link = $this->connect();
$qry = "SELECT qst, ans1, ans2, ans3 FROM db WHERE test=\"$test\"";
$result = mysql_query($qry,$link);
if (!$result) {
throw new Exception(mysql_error($link),QUERY_FAILED);
}
else if (mysql_num_rows($result) == 0 ) {
throw new Exception("",NO_RESULTS);
}
// extract data from table and populate object
$row = mysql_fetch_array($result, MYSQL_ASSOC);
mysql_close($link);
return $row;
// now return results in DataTable
$table = new DataTable();
// now fill table with data
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$table->addRow($row);
}
return $table;
}
0179175
2006/05/03(水) 04:16:56ID:???--------------------------------------------------------------------qst,ans1,ans2,ans3を表示
$testNo = $_REQUEST["test"]; //テスト問題を取得
$gateway = new TestGateway(); //TestGatewayクラス内で下のgetQuestion($test)を定義
$table = $gateway->getQuestion($testNo);
$dataview = new DataTableView($table);
$html = $dataview->render();
print_r($html);
-----------------------------------------------------------------------------qst,ans1,ans2,ans3を取り出す
public function getQuestion($test)
{
$link = $this->connect();
$qry = "SELECT qst, ans1, ans2, ans3 FROM db WHERE test=\"$test\"";
$result = mysql_query($qry,$link);
if (!$result) {
throw new Exception(mysql_error($link),QUERY_FAILED);
}
else if (mysql_num_rows($result) == 0 ) {
throw new Exception("",NO_RESULTS);
}
// extract data from table and populate object
$row = mysql_fetch_array($result, MYSQL_ASSOC);
mysql_close($link);
return $row;
// now return results in DataTable
$table = new DataTable();
// now fill table with data
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$table->addRow($row);
}
return $table;
}
0180175
2006/05/03(水) 04:18:21ID:???<?php
class DataTableView {
private $table;
private $tid = null;
private $tcls = null;
public function __construct($datatable) {
$this->table = $datatable;
}
public function setId($id) { $this->tid = $id; }
public function setClass($cls) { $this->tcls = $cls; }
public function render() {
$html = "<table " ;
if (isset($this->tid))
{
$html .= "id=\"$this->tid\" ";
}
if (isset($this->tcls))
{
$html .= "class=\"$this->tcls\" ";
}
$html .= ">\n";
続きます
0181175
2006/05/03(水) 04:18:52ID:???if ($this->table->numRows() > 0 )
{
// now render table contents
// get table iterator
$html .= "<tbody>\n";
$iterator = $this->table->getIterator();
while($iterator->valid()) {
$html .= $this->renderRow($iterator->current());
$iterator->next();
}
$html .= "</tbody>\n";
}
// now render table end
$html .= "</table>\n";
return $html;
}
private function renderRow($row){
$rowhtml ="";
if (count($row) > 0 )
{
$rowhtml .= "<tr>";
foreach($row as $item)
{
$rowhtml .= "<td>$item</td>";
}
$rowhtml .= "</tr>\n";
}
return $rowhtml;
} }
?>
0182175
2006/05/03(水) 04:22:07ID:???とりあえず今こんな感じです。
授業中にもらったサンプルスクリプトを元に作ってみました。
2カラム目から4カラム目(ans1,ans2,ans3)までだけにラジオボタンのタグをくっつけるというのがよく分からないです。
0183nobodyさん
2006/05/03(水) 04:29:05ID:???0184nobodyさん
2006/05/03(水) 04:39:25ID:???function render()を改造するかextendして、ラジオボタンつきのrender()を作ればいいだけかと。
個人的にはデザインをメソッドで組み立てるこの設計は気に入らないけどな >class DataDetailView
デザインの出力が分かりにくいしいじりにくいしデザイナーと分業できねーし。
0185175
2006/05/03(水) 04:50:53ID:???私がちゃんと理解できてないだけだと思います。
最初から勉強し直してきます。
スレ汚しすいませんでした。
>>184
レスどうもありがとうございます。
1度スクリプトを見直し理解してから184さんがおっしゃった方法を考えてみます。
そうですね。でも私にはこれでいっぱいいっぱいの状態なので、もっとPHPを勉強してからデザインのほうも考えてみることにします。
早朝にどうもありがとうございましたm(_ _)m
0186nobodyさん
2006/05/03(水) 04:56:27ID:???凝ったデザインをするならクラスでなんてやらんと思うぞ。
汎用性を持たせて拡張しようと思うといたずらに複雑になるし、その割に使えないし。
(たまにいるけどな。無駄に巨大で複雑なクラス作って何でもできるぜ!とか息巻いてるやつ)
0187nobodyさん
2006/05/03(水) 04:57:38ID:???0188nobodyさん
2006/05/03(水) 04:59:54ID:???0189175
2006/05/03(水) 05:06:38ID:???あ、確かに授業のときに先生は、とりあえずテーブルをHTML化させるためのスクリプトとしてこのクラスを紹介してました。
あとはテンプレートとCSSを使うように言ってました。
>>187
はい。私自身全く基礎が分かってないと実感しています。
なのにこの課題クラスを使わないと点が貰えないみたいなんでかなり焦っていますorz
とりあえず提出までにあと数日あるので基礎とか見直しつつなんとかやってみたいと思います。
アドバイスどうもありがとうございます^^
0190175
2006/05/03(水) 05:09:43ID:???え、既存のテンプレート・・・?
PHPのこと全く分かってない・・・orz
やっぱり基礎からやり直してきます。
PHPがどういう物か分かってきたら次のステップとして188さんのおっしゃったものを勉強してみます。
0191nobodyさん
2006/05/03(水) 05:56:55ID:???これをアンインストールしたいと考えております。
make install 時に表示された情報(下記)に載っているパスのファイルは消すだけで良いと聞いたことがあるのですが、
コマンドラインで 「php -i」とやると情報が表示されるということは、OSのシステムにも関連付けられているんですよね?
その情報はどうやって削除すれば良いのでしょうか?
教えて下さい。
0192191
2006/05/03(水) 05:57:56ID:???/usr/local/apache2/build/instdso.sh SH_LIBTOOL='/usr/local/apache2/build/libtool' libphp5.la /usr/local/apache2/modules
/usr/local/apache2/build/libtool --mode=install cp libphp5.la /usr/local/apache2/modules/
cp .libs/libphp5.so /usr/local/apache2/modules/libphp5.so
cp .libs/libphp5.lai /usr/local/apache2/modules/libphp5.la
libtool: install: warning: remember to run `libtool --finish /root/tmp/php-5.1.2/libs'
chmod 755 /usr/local/apache2/modules/libphp5.so
[activating module `php5' in /usr/local/apache2/conf/httpd.conf]
Installing PHP CLI binary: /usr/local/bin/
Installing PHP CLI man page: /usr/local/man/man1/
Installing build environment: /usr/local/lib/php/build/
Installing header files: /usr/local/include/php/
Installing helper programs: /usr/local/bin/
program: phpize
program: php-config
Installing man pages: /usr/local/man/man1/
page: phpize.1
page: php-config.1
Installing PEAR environment: /usr/local/lib/php/
[PEAR] Archive_Tar - already installed: 1.3.1
[PEAR] Console_Getopt - already installed: 1.2
[PEAR] PEAR - already installed: 1.4.6
Wrote PEAR system config file at: /usr/local/etc/pear.conf
You may want to add: /usr/local/lib/php to your php.ini include_path
Installing PDO headers: /usr/local/include/php/ext/pdo/
0193nobodyさん
2006/05/03(水) 07:11:27ID:???> コマンドラインで 「php -i」とやると情報が表示されるということは、OSのシステムにも関連付けられているんですよね?
意味が分からん。PHPを消せばそんなの表示されなくなるだろう。
0194191
2006/05/03(水) 07:32:07ID:???ありがとうございます。
php を消してから、php -i を実際にやったわけではありません。
何処のディレクトリがカレントディレクトリであっても、php -i が使えるということは、
OSのシステムに php というコマンドがインストールされているか、環境変数に設定されているということですよね?
(たぶん後者)
例えば、 php が /user/local/lib/php_hoge (これは例です) に関連付けられてたとして、
削除したら php -i はできなくなると思いますが、それでも環境変数の定義のごみが残ると思うので
それも消したいのです
0195nobodyさん
2006/05/03(水) 07:40:13ID:???UNIXのお約束で、コマンドラインで呼び出すプログラムはどれも
/usr/local/bin等、パスを通してあるディレクトリに置かれることになってる。
だから環境変数は特に定義されていない。該当ファイルを消せば終了。
0196191
2006/05/03(水) 07:45:11ID:???そうなんですか。
Windowsの感覚でいたので何処かで定義されていると思っていました。
おかげさまで解決しました。
ありがとうございました。
0197nobodyさん
2006/05/03(水) 07:45:55ID:???ようにする方法はあるのでしょうか?
0200nobodyさん
2006/05/03(水) 11:53:34ID:???0201nobodyさん
2006/05/03(水) 13:51:52ID:???どうしたらいいんでしょう・・・
0202201
2006/05/03(水) 13:52:54ID:Zf4m7aAtp2参考にしようとしたけどfsockopenで叩いてるんで意味不明でした
0203nobodyさん
2006/05/03(水) 15:43:09ID:???0204nobodyさん
2006/05/03(水) 18:02:05ID:???$no = array('1','2','3','4','5','6'); こんな感じにいれたいのですが、手動でいれるのはさすがに大変なので、
ループ処理かなんかでうまくいれられないかと試行錯誤してみたのですが、よくわかりません。
教えてください。
0205nobodyさん
2006/05/03(水) 18:16:17ID:???$i = 0;
while($i < 45){
$no[] = $i;
$i++:
}
print_r($no);
0206nobodyさん
2006/05/03(水) 18:16:54ID:???http://jp.php.net/manual/ja/function.range.php
0207nobodyさん
2006/05/03(水) 18:19:02ID:???$i = 1;
while($i <= 45){
$no[] = $i;
$i++;
}
print_r($no);
0210nobodyさん
2006/05/03(水) 18:30:18ID:???0211nobodyさん
2006/05/03(水) 18:35:13ID:???0213nobodyさん
2006/05/03(水) 18:46:54ID:???掲示板をつくっていて、たとえば名前が入力されないで投稿ボタンがおされたら
名前が入力されていません。とだけ表示するようにしたいのです(そのほかは何も表示されない)
そのような場合はどうすればいいのでしょうか?
0214nobodyさん
2006/05/03(水) 18:57:24ID:???if(名前が入力されているか調べる){
通常の処理
}else{
名前が入力されていません、と表示
}
0215nobodyさん
2006/05/03(水) 19:10:19ID:???ファイル書き込み
}else{
名前が入力されていません、と表示 ここがつまっています。
}
0216nobodyさん
2006/05/03(水) 19:10:34ID:???インクリメント逆のほうが速いらしいよ
for( $i=1; $i<=45; ++$i ){
$no[] = $i;
}
0217nobodyさん
2006/05/03(水) 19:18:48ID:???if ($name === "") {
...処理...
} else {
echo "名前が入力されていますん";
}
0218nobodyさん
2006/05/03(水) 19:20:47ID:???if ($name != "") {
...処理...
} else {
echo "名前が入力されていますん";
}
0219nobodyさん
2006/05/03(水) 19:22:14ID:jSHHm/CAそれだけではフォームなども表示されたままになってしまいませんか?
ページにその文字だけ表示したいのですが、不可能なんでしょうか?
0220nobodyさん
2006/05/03(水) 19:29:21ID:???mb_internal_encoding('EUC-JP');
$numbers = array();
for ($i = 1; $i <= 45; $i++) $numbers[] = mb_convert_kana($i, 'N');
var_dump($numbers);
0222nobodyさん
2006/05/03(水) 19:47:04ID:???if(名前が入力されている){
通常の処理
}else{
名前が入力されていません
}
}else{
フォームの表示
}
0225nobodyさん
2006/05/03(水) 21:26:09ID:???0226nobodyさん
2006/05/03(水) 22:16:46ID:???0227nobodyさん
2006/05/03(水) 23:15:39ID:igkulSN30228nobodyさん
2006/05/04(木) 00:04:04ID:???0229nobodyさん
2006/05/04(木) 00:10:04ID:rpOcOacz0230nobodyさん
2006/05/04(木) 00:18:10ID:???0234nobodyさん
2006/05/04(木) 00:32:41ID:???0236nobodyさん
2006/05/04(木) 01:37:59ID:???>>1 >>200
ここは下らねぇ質問に答えるスレだ
マニュアルも読んでない「下らねぇ質問にも値しない」質問には答える必要が無い
0237nobodyさん
2006/05/04(木) 02:04:15ID:???0238nobodyさん
2006/05/04(木) 06:27:36ID:wXjTBXc2PEAR::DBを勉強していてプレスフォルダなるものを知ったのですが、これだけでSQLインジェクションは防げると思っていいのでしょうか。
0239nobodyさん
2006/05/04(木) 13:52:57ID:???このエラー文ってなに?
■ このスレッドは過去ログ倉庫に格納されています