ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Let's!PHP講座☆コミュの質問・相談トピックス☆

  • mixiチェック
  • このエントリーをはてなブックマークに追加
質問・相談はこちらへどうぞ

技術的なものから転職やスキルupの相談まで
お気軽に書き込みしてください☆

コメント(49)

たぶん、そのエラーは「再度宣言できへんでぇ〜(; ̄ー ̄A」って事を言っていると思いますが 如何でしょう?

RepeatedCheck() が何度か呼ばれていて、2回目の時点でエラーが発生しているのではないでしょうか?

ということで、ex1 の include を include_once に変えてみては、どうでしょうか?あと、共通ルーチンの include を書く位置については function 内部に書くのは、オススメしません。ファイルの先頭付近で行う方が良いと思いますよ。
まず、警告やエラーメッセージは、その通りの事が起こっています。その原因を調べないと、全く違うところを修正しちゃったりして、ますます迷宮入りすることになってしまうでしょう。

以下の警告メッセージは「failed to open stream: No such file or directory in ...」PHP がインクルードする先のファイルが見つけられず
「そんなの見つからないよヾ(`д´)ノ」って PHP が言ってるわけで、test.inc on line 6 のパス設定は前のままで良かったのかな?「Failed opening ...」はファイルが開けなかった事の叫びで、「Cannot instantiate non-existent class ...」はファイルが開けずクラス定義がされなかったから、後続のクラスをインスタンス化する処理の実行に失敗してエラーという流れに読み取れます。

まず、インクルードパスに相対パスを使う場合、呼び出される URL に対応する php のコードをカレントとしますので、そこからの相対になります。なので、以下の手が使えるでしょうか?
・共通部品に対しては include_path を適切に設定し、パスを省略可能としておく
・呼び出される URL の php コードの階層を常に一定に保つ
・呼び出される URL の php コードの最初に include_path を調整する
・共通部品に関しては、絶対パスで記述する
などなど、呼び出す php の階層が変わるだけで、動かなくなるというのは良くあることで、そのためにもディレクトリ構造が明確になっていること、あるいは意識しなくても良い作りが前提となります。ここはプログラマなり、設計者が作りの面で意識しなければならない所ですね。

Oracle にログインを拒否される場合は、ログイン情報が的確に取れていますでしょうか?もし、ローカルのファイルからログイン情報を取り出している場合など、確実にファイルから情報を取り出せていますか?

こゅさんの扱っているプログラムには、現時点で、複数個の問題が入っていたり、解らない部分が多いために、問題の明確な切り分けができず、難しくなっているのではないでしょうか?

行番号が示された箇所にエラーが出ている場合、その行か、それより前のコードに問題があるのはほぼ確定ですから、地道に辿っていくと問題を見つけられるでしょう。とにかく問題を回避したい場合、すべてをシンプルにすることです。
う〜ん、どこかで二重の include が発生していることが、このエラーのよくあるパターンだと思うのだけど。どうなんだろうねぇ。

OraConnectInfo.php には OraConnectInfo のクラス定義があると思うのですが、それを以下のように囲ってみると動き変わるかな?

if (!class_exists('OraConnectInfo')) { // <-- これ追加

class クラス名 {
}

} // <-- これ追加

これで、重複定義のエラーが消えるのであれば、他の所で include を書いているのが原因です。問題となっている include を include_once に変えるか、削除すればこの問題は解決かな?

この手のエラーですが、PHP が吐いているエラー箇所には、まず原因は無く include の呼び出し元に原因があるハズ。
エラーがいつ起こるか解っているのであれば、どこまで正常に動くか問題の切り分けをすることが重要です。
これには、途中で無理矢理 exit を入れて判定したり、いろいろと方法があります。

grep 検索を行い OraConnectInfo.php を include している箇所を全て洗い出すのが手っ取り早いかもしれないです。蛇足ですが、プログラムを組む人であれば、grep と diff は GUI ベースのもので良いので活用しましょう。使えるだけで少しレベルアップできます^^
PHP4 でオブジェクトの参照渡しを実現したい場合は、以下の2つの方法で実現できます。

方法1:定義そのものを参照で受け取る形
function func1(&$obj) {
// ここでの $obj は参照渡し
}

方法2:呼出側で参照渡しを明示する形

function func2($obj) {
// ここでの $obj は値渡し
}

func2(&$obj); // 呼出側で参照渡しに変更する

これでやりたいことは実現できるはず。ちなみに、PHP5 は参照渡しが標準っぽいですね。細かい動きがかなり変わりそうです^^;


で、全体がどういう実行経路になってるのか不明なのですが、ブラウザなりから起動された php ファイルから、test.inc やらが include されているのですよね?気になるのが、それ以降の箇所で OraConnectInfo を include している箇所があったりで、そこが問題となっている可能性があるのでは?

今の状況を察する限り、単体のソースコードの話ではないため、構成やら組み方を一度整理した方が早いかもしれません。

経験則として、他人と共有して使っているものであれば、チーム内での使い方や組み方が統一されていることが非常に重要となります。全くルールが無い場合、簡単な仕様変更対応が、思わぬ不具合を招くことがありますので・・・
当方PHP初心者です。
挨拶の方に書いてしまいましたが、こちらへ書くべきでした。
フォームから送られてきた情報をMYSQLへ格納し、
条件抽出をしたものをHTMLに出力するプログラムを
作りたいのですが、難しいでしょうか?
よろしくお願いします。
>>やっぱりニンニン さん

ご返信ありがとうございます。
まずはこれを見て頑張りたいと思います!
有難うございました。
>>20
自分ははじめの頃は、フォームから送った値はどこにあるのか?
といったレベルで躓きました(笑
あと、HTMLが判らないとか(苦笑

そういった本当の基礎がわかると、後はスコーンと進めるんですけどね。
php4での質問です。
レンタルサーバに、domxmlをインストールしてもらったんやけど、

Warning: main(XML/sql2xml.php): failed to open stream: No such file or directory in /home/public_html/test_xml.php on line 2

Fatal error: main(): Failed opening required 'XML/sql2xml.php' (include_path='.:/usr/share/pear') in /home/public_html/test_xml.php on line 2
とエラーが出てきよる。

require_once("XML/sql2xml.php");
という行なんですがね。
どういうことが考えられますでしょうか。教えてください。
う〜ん、状況としてはメッセージの通り
/home/public_html/test_xml.php で使っている XML/sql2xml.php が見つからないっぽいですね。

sql2xml.php が期待する場所にインストールされていないと思います。sql2xml を使ったことが無いので、それのインストールの仕方等わかっていないのですが、インストールは適切に行われていますでしょうか?domxml に含まれているのかな?

適切に行われているのであれば、今の include_path および require / include なりで使用するパスの指定が適切であれば動くはずです。

今の環境設定の場合、sql2xml.php が、以下のどちらかの場所に存在しなければエラーとなります。

/home/public_html/XML/sql2xml.php
/usr/share/pear/XML/sql2xml.php

たぶん、pear の下にあることを期待していると思いますが、実際にファイルがあるかどうかを確認してみましょう。
じ〜るさん、ありがとう!
レンタルサーバに、問い合わせ中です。

暫定作業として、おっしゃられている
/home/public_html/
に、XML/sql2xml.phpを配置しました。

他のPEARライブラリは、
require_once("DB.php");
で問題なく使用できるので、インストール作業が正しくできていないのではないかと推測します。

アドバイスありがとうございました。
どうもはじめまして^^
ホームページ作りはじめて2年くらいです。
どうぞよろしくお願い致します。
現在サーバーサイドスクリプトの勉強中・・・・ってか早速質問してみたいのですが^^;
「PHP及びapacheについて」なんですが
まず動作環境が・・・
OS:WinXP、
webサーバー:apache2.059
スクリプト:PHP5.16
エディタ:秀丸
これから勉強しようとapacheの「httpd.conf」
phpの「php.ini」を本を片手に設定し、
サンプルPHPを
\Apache Group\Apache2\htdocsのフォルダに入れ
ブラウザ(IE6.0)で見ようと
http://localhost/サンプル.php
と入力するとブラウジングされなく、何故か「ファイルのダウンロード」のダイアログが出てきてしまいます。
検索で調べても
「jsp実行時にファイルのダウンロードのダイアログが・・・」というものはあったのですが参考になりませんでした^^;
漠然としすぎかもしれませんがどなたがご教授願えないでしょうか?
まず、php本体が正常に動作しているか

コマンドプロンプトで
phpのインストールディレクトリに移動し

php -i

というコマンドを入力してみてください。
これで情報が表示されれば、php側はひとまずOK。

でも恐らく、ファイルのダウンロードになるってことは、
apache側(httpd.conf)の問題。
真っ先に考えられるのは、AddTypeの指定が抜けてる。
(apacheモジュールとして動かす場合)

AddType application/x-httpd-php .php

↑の指定をしてあるかチェック。

ちなみに、php.ini、httpd.confは変更後apache再起動しないと反映されませんのでご注意。


一応、windowsへのインストールは下記を参照ください
http://php.mirror.camelnetwork.com/manual/ja/install.windows.apache2.php
おはようございます^^
早速のご教授ありがとうございます^^>すろさん

「Apache 2.0 でモジュール版の PHP を使用するには、 以下の行を Apache 設定ファイル httpd.conf に追加してください。」
で、
#LoadModule php5_module C:/php/php5apache2.dll
の先頭の#をはずしていなかったでした^^;
本には書いてなかったんだけどなぁ。(旧バージョン)

アップデートが頻繁なことも注意しとかないとだめなんですね^^;

さておき、無事動作確認がとれました^^
今とってもワクワクしております^^
どうも有難う御座いました
こんにちわ

http://script.s16.xrea.com/
の2chbbsのスクリプトを携帯用のDOCOMOのutn取得改造しようと思い
http://script.s16.xrea.com/2ch/test/read.php/php/1048578946/193-292
の257−260どうりにやったら263の人と同じく
【ERROR:末端情報を送信してください】
になりました

ぜひなにか教えてください!
js側が少し面倒になるけど、iframe使うとか。
結構主流な方法です。


PHPでプロキシ

ヒント:fsockopen()を使う。
curl(http://jp2.php.net/curl)とか、他にも方法はあるけど。
pearにも多分あると思うが、知らない。


自分で一から書くの面倒だっていう場合は、
Pukiwikiのソースに入ってるproxy.phpを使う。
詳しくは下記サイトを参照ください。
http://ryouchi.seesaa.net/article/30243482.html
※ライセンスはGPLです。
はじめまして。

ホームページで個人情報などを入力するフォーム
で、入力途中でサイトの別ページに移動して再び
フォームに戻ってきた場合に入力したところまでは
自動で入っているようにしたいのですが、
入力データを維持させるのはどのようにしているの
でしょうか?

アドバイスお願いします。

php4.3です。
>すろさん
ありがとうございます。
試してみます。
file_get_contents()でのURLサポートは
allow_url_fopenの設定値に依存します。

セキュリティ上の理由から、
allow_url_fopenはphp.iniでのみ設定可能で
スクリプト側でini_setによって設定を変更することは出来ません。

php4ならfopen使う形になるけれど、
URL扱う場合は、ホワイトリスト等でURLのフィルタリングしたほうがいいです。
ちなみに、fsockopen()はソケット接続なので、
telnetでHTTP通信するのと同じ感じで
HTTPプロトコルがある程度分かっていないと、厳しいかも知れません(汗

fsockopen自体の扱い方はマニュアル見れば恐らく分かると思うので。
(サンプルスクリプトも載っているし)


単純な構成としては、

$_GET['url'] = "http://mixi.jp/";
$url = parse_url(urldecode($_GET['url']));
$url['query'] = isset($url['query']) ? '?'.$arr['query'] : '';
$url['port'] = isset($url['port']) ? $arr['port'] : 80;
$url_path = isset($arr['url']) ? $url['path'] : '/';
$request_uri = $url_path.$url['query'];

$fp = fsockopen($url['host'], $url['port'], $errno, $errstr, 30);
//エラーのとき
if (!$fp)
{
 //エラーのときは$errstrにエラーメッセージが入る。
 echo "$errstr ($errno)<br />\n";
}
//正常なとき
else
{
 //HTTP1.0と1.1で違いはあるが、基本的にはこんな感じ
 $request = "GET ".$request_uri." HTTP/1.0\r\n";
 $request .= "Host: ".$url['host']."\r\n";
 $request .= "\r\n";
 fwrite($fp, $request);//コマンドを投げる:fputsでも可(ファイルに書き込むのと同じです)

 //レスポンス取得
 $response_header = '';
 $response_body = '';
 do
 {
  $response_header.= fread($fp, 1);
 }while (!preg_match('/\\r\\n\\r\\n$/', $response_header));
 while (!feof($fp))
 {
  $response_body .= fread($fp,4096);
 }

 fclose($fp);

 //レスポンス表示
 echo "<pre>";
 //ヘッダ表示
 echo htmlspecialchars($response_header,ENT_QUOTES);
 echo "<hr />";
 //ボディ表示
 echo htmlspecialchars($response_body,ENT_QUOTES);
 echo "</pre>";
}


FireFoxのアドオン(Live HTTP Headers)でHTTPヘッダを見ると、
理解しやすいかと思います。
(IEにも同様の拡張がありますが、名前忘れました)


余談:HTTP1.1(普及しているブラウザは大概1.1)よりも1.0のほうがスクリプトを書くのは楽です。

fsockopenとfopen,file_get_contentsどちらを使うかは、
ヘッダが必要か不必要かによって判断するか。
共有ホスティングサーバーだと、php.iniを触れなかったりするので、使えるほうを使う。


あ、すみません。
$arrは$urlに脳内変換してください。
(最初$arrで書いてたけど、後から変えて、変えきれてなかった)

あくまでプロキシとしての用途で考えた場合は、
file_get_contentsよりfsockopenのほうが向いてます。
だからといって、file_get_contentsを完全否定するわけではありません。

やっぱ面倒だからfile_get_contentsでっていうのも有りです。
だけれども、
$html = file_get_contents ($url);
の前にurlをチェックする必要があります。

例えば$urlが /usr/local/apache2/htdocs/.htaccess
とかいうローカルファイルのアドレスであった場合、
その内容を見れてしまうことになります。

urlの正規表現でチェックでもいいし、
parse_urlで一旦urlを解析して、
ホスト名でチェックとかでも。
MVCモデルを理解するより、PHPの言語仕様を理解したほうがいいです。


MVCのフレームワークは、オープンソースの結構あるけど、
決め手不在なフレームワークたち。


オープンソースのフレームワークを使えるよりは
フレームワークを作れるほうがいい。

まあ、企業によって変わるだろうけど。


PHPの資格取る感じで学習したほうがいいかも。


実務レベルとは言ってもweb系は企業によって結構差あります。

運用と開発でも変わるし。




ソースのコメントはphpdocumentorに合わせてね。
(この書き方は慣れておいて損はない。
javaでもある程度通用するし)

その他コーディング規則(インデントはスペース4文字とか)は郷に従えと

>開発において比較した場合には、レベルがあまり高くないプロとアマでは差がなかったりするのでしょうか?

言語レベルで言ったら、実際差はないに等しいでしょうね。。
むしろ、アマのほうが時間制約がない分、理想を追求できるので、レベル高いんじゃないかとさえ思う。

偽プロ(笑)とアマの違いは言語以外のところにある。
例えば、Webアプリとしてのセキュリティ対策(クロスサイトスクリプティングの対応等々)とか。

ただ、未だにセキュリティ後回しなところは多いらしいです。
(費用が回らないことを理由に。。

>言語仕様を知る
>↓
>その言語により「できること」がより見えてくる
>また、バグを見つけやすくなり、セキュリティ面でも脆弱性の発見・把握がしやすくなる
>↓
>よって言語仕様を理解するのが望ましい
>
>という風に解釈したのですが、この考え方でよろしいでしょうか?
はい、いいですよー。
セキュリティ対策は結局のところイタチゴッコですからね。

企業によっては
脆弱性診断サービスとか使ってたりする。

まあ、ウィルス対策ソフトが定義ファイルの更新必要なように、
既知のものしか診断できないけど。

んで、セキュリティ対策はアプリだけの問題じゃなく、、

分かりやすく言えば金食い虫なんで、
経営層の判断に委ねられる。

アプリで対応できるのはすごく限られた部分。


学習は基本的には
その本(自分も読みました)とネットでいいかと。

ただ、深追いすると
出口のない迷路に入り込むのでほどほどに。

あくまで開発者でありたいなら・・・


ちなみに自分は
基本ネットからでした。


以下余談
どこでも通用するweb開発者になりたいなら
最低限、tcp/ip,httpプロトコルは知ってたほうがいいです。

phpで純正関数(クラス)のみ使用してhttpクライアント(プロキシ)を作って見ると、
言語の学習にもなり、httpプロトコルの学習にもなり、一石二鳥。


後は、新しい技術に対するアンテナを。

英語が分かるとなおよし

ログインすると、残り25件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

Let's!PHP講座☆ 更新情報

Let's!PHP講座☆のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング