...

View Full Version : PHP Include Text File



IFeelYourPain
05-09-2009, 06:56 PM
<html>
<body>

<?php include("Text.txt"); ?>

</body>
</html>

I'm using this code to display a text file. However if I type:

This
Is
A
Test

It will display in the browser as

ThisIsATest

How can I fix this?

timgolding
05-09-2009, 07:08 PM
If you look at your source you will see that it actually displays

This
is
a
Test

in the source

However you are looking at it through a browser that renders html. Therefore you have to echo the html for new line which is either <br> or <br /> depending on what docutype declaration you are using. In this case none so I would just put



This<br />
Is<br />
A<br />
Test<br />


In Text.txt

timgolding
05-09-2009, 07:12 PM
Another appracoh would be to use the php to replace new line characters with <br > Something like



<html>
<body>

<?php
$str= file_get_contents("Text.txt");
$str = nl2br($str, true); // for XHMTL (in other words <br />). Use false for <br>. i.e $str = nl2br($str, false);
echo $str;
?>

</body>
</html>

venegal
05-09-2009, 07:12 PM
I guess changing the plain text to actual html is not an option, so I'd suggest using <pre> tags.



<html>
<body>

<pre>
<?php include("Text.txt"); ?>
</pre>

</body>
</html>

IFeelYourPain
05-09-2009, 07:20 PM
I guess changing the plain text to actual html is not an option, so I'd suggest using <pre> tags.



<html>
<body>

<pre>
<?php include("Text.txt"); ?>
</pre>

</body>
</html>


Yea considering I have tons of files and lines I'd have to edit. Very simple solution. Saves me the time of editing over like 200 txt files.

ALSO: I don't guess you would know how to make it work for links would you? Like:

<a href="#" onClick="ajaxwin=dhtmlwindow.open('ajaxbox', 'ajax', 'Textfile.txt', 'Ajax Win Title', 'width=650px,height=400px,left=300px,top=100px,resize=0,scrolling=1'); return false">Create/ Open Ajax Window</a>


If needed here's the javascript to the link:

var dhtmlwindow={
imagefiles:['codes/windowfiles/min.gif', 'codes/windowfiles/close.gif', 'codes/windowfiles/restore.gif', 'codes/windowfiles/resize.gif'], //Path to 4 images used by script, in that order
ajaxbustcache: true, //Bust caching when fetching a file via Ajax?
ajaxloadinghtml: '<b>Loading Page. Please wait...</b>', //HTML to show while window fetches Ajax Content?

minimizeorder: 0,
zIndexvalue:100,
tobjects: [], //object to contain references to dhtml window divs, for cleanup purposes
lastactivet: {}, //reference to last active DHTML window

init:function(t){
var domwindow=document.createElement("div") //create dhtml window div
domwindow.id=t
domwindow.className="dhtmlwindow"
var domwindowdata=''
domwindowdata='<div class="drag-handle">'
domwindowdata+='DHTML Window <div class="drag-controls"><img src="'+this.imagefiles[0]+'" title="Minimize" /><img src="'+this.imagefiles[1]+'" title="Close" /></div>'
domwindowdata+='</div>'
domwindowdata+='<div class="drag-contentarea"></div>'
domwindowdata+='<div class="drag-statusarea"><div class="drag-resizearea" style="background: transparent url('+this.imagefiles[3]+') top right no-repeat;">&nbsp;</div></div>'
domwindowdata+='</div>'
domwindow.innerHTML=domwindowdata
document.getElementById("dhtmlwindowholder").appendChild(domwindow)
//this.zIndexvalue=(this.zIndexvalue)? this.zIndexvalue+1 : 100 //z-index value for DHTML window: starts at 0, increments whenever a window has focus
var t=document.getElementById(t)
var divs=t.getElementsByTagName("div")
for (var i=0; i<divs.length; i++){ //go through divs inside dhtml window and extract all those with class="drag-" prefix
if (/drag-/.test(divs[i].className))
t[divs[i].className.replace(/drag-/, "")]=divs[i] //take out the "drag-" prefix for shorter access by name
}
//t.style.zIndex=this.zIndexvalue //set z-index of this dhtml window
t.handle._parent=t //store back reference to dhtml window
t.resizearea._parent=t //same
t.controls._parent=t //same
t.onclose=function(){return true} //custom event handler "onclose"
t.onmousedown=function(){dhtmlwindow.setfocus(this)} //Increase z-index of window when focus is on it
t.handle.onmousedown=dhtmlwindow.setupdrag //set up drag behavior when mouse down on handle div
t.resizearea.onmousedown=dhtmlwindow.setupdrag //set up drag behavior when mouse down on resize div
t.controls.onclick=dhtmlwindow.enablecontrols
t.show=function(){dhtmlwindow.show(this)} //public function for showing dhtml window
t.hide=function(){dhtmlwindow.hide(this)} //public function for hiding dhtml window
t.close=function(){dhtmlwindow.close(this)} //public function for closing dhtml window (also empties DHTML window content)
t.setSize=function(w, h){dhtmlwindow.setSize(this, w, h)} //public function for setting window dimensions
t.moveTo=function(x, y){dhtmlwindow.moveTo(this, x, y)} //public function for moving dhtml window (relative to viewpoint)
t.isResize=function(bol){dhtmlwindow.isResize(this, bol)} //public function for specifying if window is resizable
t.isScrolling=function(bol){dhtmlwindow.isScrolling(this, bol)} //public function for specifying if window content contains scrollbars
t.load=function(contenttype, contentsource, title){dhtmlwindow.load(this, contenttype, contentsource, title)} //public function for loading content into window
this.tobjects[this.tobjects.length]=t
return t //return reference to dhtml window div
},

open:function(t, contenttype, contentsource, title, attr, recalonload){
var d=dhtmlwindow //reference dhtml window object
function getValue(Name){
var config=new RegExp(Name+"=([^,]+)", "i") //get name/value config pair (ie: width=400px,)
return (config.test(attr))? parseInt(RegExp.$1) : 0 //return value portion (int), or 0 (false) if none found
}
if (document.getElementById(t)==null) //if window doesn't exist yet, create it
t=this.init(t) //return reference to dhtml window div
else
t=document.getElementById(t)
this.setfocus(t)
t.setSize(getValue(("width")), (getValue("height"))) //Set dimensions of window
var xpos=getValue("center")? "middle" : getValue("left") //Get x coord of window
var ypos=getValue("center")? "middle" : getValue("top") //Get y coord of window
//t.moveTo(xpos, ypos) //Position window
if (typeof recalonload!="undefined" && recalonload=="recal" && this.scroll_top==0){ //reposition window when page fully loads with updated window viewpoints?
if (window.attachEvent && !window.opera) //In IE, add another 400 milisecs on page load (viewpoint properties may return 0 b4 then)
this.addEvent(window, function(){setTimeout(function(){t.moveTo(xpos, ypos)}, 400)}, "load")
else
this.addEvent(window, function(){t.moveTo(xpos, ypos)}, "load")
}
t.isResize(getValue("resize")) //Set whether window is resizable
t.isScrolling(getValue("scrolling")) //Set whether window should contain scrollbars
t.style.visibility="visible"
t.style.display="block"
t.contentarea.style.display="block"
t.moveTo(xpos, ypos) //Position window
t.load(contenttype, contentsource, title)
if (t.state=="minimized" && t.controls.firstChild.title=="Restore"){ //If window exists and is currently minimized?
t.controls.firstChild.setAttribute("src", dhtmlwindow.imagefiles[0]) //Change "restore" icon within window interface to "minimize" icon
t.controls.firstChild.setAttribute("title", "Minimize")
t.state="fullview" //indicate the state of the window as being "fullview"
}
return t
},

setSize:function(t, w, h){ //set window size (min is 150px wide by 100px tall)
t.style.width=Math.max(parseInt(w), 150)+"px"
t.contentarea.style.height=Math.max(parseInt(h), 100)+"px"
},

moveTo:function(t, x, y){ //move window. Position includes current viewpoint of document
this.getviewpoint() //Get current viewpoint numbers
t.style.left=(x=="middle")? this.scroll_left+(this.docwidth-t.offsetWidth)/2+"px" : this.scroll_left+parseInt(x)+"px"
t.style.top=(y=="middle")? this.scroll_top+(this.docheight-t.offsetHeight)/2+"px" : this.scroll_top+parseInt(y)+"px"
},

isResize:function(t, bol){ //show or hide resize inteface (part of the status bar)
t.statusarea.style.display=(bol)? "block" : "none"
t.resizeBool=(bol)? 1 : 0
},

isScrolling:function(t, bol){ //set whether loaded content contains scrollbars
t.contentarea.style.overflow=(bol)? "auto" : "hidden"
},

load:function(t, contenttype, contentsource, title){ //loads content into window plus set its title (3 content types: "inline", "iframe", or "ajax")
if (t.isClosed){
alert("DHTML Window has been closed, so no window to load contents into. Open/Create the window again.")
return
}
var contenttype=contenttype.toLowerCase() //convert string to lower case
if (typeof title!="undefined")
t.handle.firstChild.nodeValue=title
if (contenttype=="inline")
t.contentarea.innerHTML=contentsource
else if (contenttype=="div"){
var inlinedivref=document.getElementById(contentsource)
t.contentarea.innerHTML=(inlinedivref.defaultHTML || inlinedivref.innerHTML) //Populate window with contents of inline div on page
if (!inlinedivref.defaultHTML)
inlinedivref.defaultHTML=inlinedivref.innerHTML //save HTML within inline DIV
inlinedivref.innerHTML="" //then, remove HTML within inline DIV (to prevent duplicate IDs, NAME attributes etc in contents of DHTML window
inlinedivref.style.display="none" //hide that div
}
else if (contenttype=="iframe"){
t.contentarea.style.overflow="hidden" //disable window scrollbars, as iframe already contains scrollbars
if (!t.contentarea.firstChild || t.contentarea.firstChild.tagName!="IFRAME") //If iframe tag doesn't exist already, create it first
t.contentarea.innerHTML='<iframe src="" style="margin:0; padding:0; width:100%; height: 100%" name="_iframe-'+t.id+'"></iframe>'
window.frames["_iframe-"+t.id].location.replace(contentsource) //set location of iframe window to specified URL
}
else if (contenttype=="ajax"){
this.ajax_connect(contentsource, t) //populate window with external contents fetched via Ajax
}
t.contentarea.datatype=contenttype //store contenttype of current window for future reference
},

setupdrag:function(e){
var d=dhtmlwindow //reference dhtml window object
var t=this._parent //reference dhtml window div
d.etarget=this //remember div mouse is currently held down on ("handle" or "resize" div)
var e=window.event || e
d.initmousex=e.clientX //store x position of mouse onmousedown
d.initmousey=e.clientY
d.initx=parseInt(t.offsetLeft) //store offset x of window div onmousedown
d.inity=parseInt(t.offsetTop)
d.width=parseInt(t.offsetWidth) //store width of window div
d.contentheight=parseInt(t.contentarea.offsetHeight) //store height of window div's content div
if (t.contentarea.datatype=="iframe"){ //if content of this window div is "iframe"
t.style.backgroundColor="#F8F8F8" //colorize and hide content div (while window is being dragged)
t.contentarea.style.visibility="hidden"
}
document.onmousemove=d.getdistance //get distance travelled by mouse as it moves
document.onmouseup=function(){
if (t.contentarea.datatype=="iframe"){ //restore color and visibility of content div onmouseup
t.contentarea.style.backgroundColor="white"
t.contentarea.style.visibility="visible"
}
d.stop()
}
return false
},

getdistance:function(e){
var d=dhtmlwindow
var etarget=d.etarget
var e=window.event || e
d.distancex=e.clientX-d.initmousex //horizontal distance travelled relative to starting point
d.distancey=e.clientY-d.initmousey
if (etarget.className=="drag-handle") //if target element is "handle" div
d.move(etarget._parent, e)
else if (etarget.className=="drag-resizearea") //if target element is "resize" div
d.resize(etarget._parent, e)
return false //cancel default dragging behavior
},

getviewpoint:function(){ //get window viewpoint numbers
var ie=document.all && !window.opera
var domclientWidth=document.documentElement && parseInt(document.documentElement.clientWidth) || 100000 //Preliminary doc width in non IE browsers
this.standardbody=(document.compatMode=="CSS1Compat")? document.documentElement : document.body //create reference to common "body" across doctypes
this.scroll_top=(ie)? this.standardbody.scrollTop : window.pageYOffset
this.scroll_left=(ie)? this.standardbody.scrollLeft : window.pageXOffset
this.docwidth=(ie)? this.standardbody.clientWidth : (/Safari/i.test(navigator.userAgent))? window.innerWidth : Math.min(domclientWidth, window.innerWidth-16)
this.docheight=(ie)? this.standardbody.clientHeight: window.innerHeight
},

rememberattrs:function(t){ //remember certain attributes of the window when it's minimized or closed, such as dimensions, position on page
this.getviewpoint() //Get current window viewpoint numbers
t.lastx=parseInt((t.style.left || t.offsetLeft))-dhtmlwindow.scroll_left //store last known x coord of window just before minimizing
t.lasty=parseInt((t.style.top || t.offsetTop))-dhtmlwindow.scroll_top
t.lastwidth=parseInt(t.style.width) //store last known width of window just before minimizing/ closing
},

move:function(t, e){
t.style.left=dhtmlwindow.distancex+dhtmlwindow.initx+"px"
t.style.top=dhtmlwindow.distancey+dhtmlwindow.inity+"px"
},

resize:function(t, e){
t.style.width=Math.max(dhtmlwindow.width+dhtmlwindow.distancex, 150)+"px"
t.contentarea.style.height=Math.max(dhtmlwindow.contentheight+dhtmlwindow.distancey, 100)+"px"
},

enablecontrols:function(e){
var d=dhtmlwindow
var sourceobj=window.event? window.event.srcElement : e.target //Get element within "handle" div mouse is currently on (the controls)
if (/Minimize/i.test(sourceobj.getAttribute("title"))) //if this is the "minimize" control
d.minimize(sourceobj, this._parent)
else if (/Restore/i.test(sourceobj.getAttribute("title"))) //if this is the "restore" control
d.restore(sourceobj, this._parent)
else if (/Close/i.test(sourceobj.getAttribute("title"))) //if this is the "close" control
d.close(this._parent)
return false
},

minimize:function(button, t){
dhtmlwindow.rememberattrs(t)
button.setAttribute("src", dhtmlwindow.imagefiles[2])
button.setAttribute("title", "Restore")
t.state="minimized" //indicate the state of the window as being "minimized"
t.contentarea.style.display="none"
t.statusarea.style.display="none"
if (typeof t.minimizeorder=="undefined"){ //stack order of minmized window on screen relative to any other minimized windows
dhtmlwindow.minimizeorder++ //increment order
t.minimizeorder=dhtmlwindow.minimizeorder
}
t.style.left="10px" //left coord of minmized window
t.style.width="200px"
var windowspacing=t.minimizeorder*10 //spacing (gap) between each minmized window(s)
t.style.top=dhtmlwindow.scroll_top+dhtmlwindow.docheight-(t.handle.offsetHeight*t.minimizeorder)-windowspacing+"px"
},

restore:function(button, t){
dhtmlwindow.getviewpoint()
button.setAttribute("src", dhtmlwindow.imagefiles[0])
button.setAttribute("title", "Minimize")
t.state="fullview" //indicate the state of the window as being "fullview"
t.style.display="block"
t.contentarea.style.display="block"
if (t.resizeBool) //if this window is resizable, enable the resize icon
t.statusarea.style.display="block"
t.style.left=parseInt(t.lastx)+dhtmlwindow.scroll_left+"px" //position window to last known x coord just before minimizing
t.style.top=parseInt(t.lasty)+dhtmlwindow.scroll_top+"px"
t.style.width=parseInt(t.lastwidth)+"px"
},


close:function(t){
try{
var closewinbol=t.onclose()
}
catch(err){ //In non IE browsers, all errors are caught, so just run the below
var closewinbol=true
}
finally{ //In IE, not all errors are caught, so check if variable isn't defined in IE in those cases
if (typeof closewinbol=="undefined"){
alert("An error has occured somwhere inside your \"onclose\" event handler")
var closewinbol=true
}
}
if (closewinbol){ //if custom event handler function returns true
if (t.state!="minimized") //if this window isn't currently minimized
dhtmlwindow.rememberattrs(t) //remember window's dimensions/position on the page before closing
if (window.frames["_iframe-"+t.id]) //if this is an IFRAME DHTML window
window.frames["_iframe-"+t.id].location.replace("about:blank")
else
t.contentarea.innerHTML=""
t.style.display="none"
t.isClosed=true //tell script this window is closed (for detection in t.show())
}
return closewinbol
},


setopacity:function(targetobject, value){ //Sets the opacity of targetobject based on the passed in value setting (0 to 1 and in between)
if (!targetobject)
return
if (targetobject.filters && targetobject.filters[0]){ //IE syntax
if (typeof targetobject.filters[0].opacity=="number") //IE6
targetobject.filters[0].opacity=value*100
else //IE 5.5
targetobject.style.filter="alpha(opacity="+value*100+")"
}
else if (typeof targetobject.style.MozOpacity!="undefined") //Old Mozilla syntax
targetobject.style.MozOpacity=value
else if (typeof targetobject.style.opacity!="undefined") //Standard opacity syntax
targetobject.style.opacity=value
},

setfocus:function(t){ //Sets focus to the currently active window
this.zIndexvalue++
t.style.zIndex=this.zIndexvalue
t.isClosed=false //tell script this window isn't closed (for detection in t.show())
this.setopacity(this.lastactivet.handle, 0.5) //unfocus last active window
this.setopacity(t.handle, 1) //focus currently active window
this.lastactivet=t //remember last active window
},


show:function(t){
if (t.isClosed){
alert("DHTML Window has been closed, so nothing to show. Open/Create the window again.")
return
}
if (t.lastx) //If there exists previously stored information such as last x position on window attributes (meaning it's been minimized or closed)
dhtmlwindow.restore(t.controls.firstChild, t) //restore the window using that info
else
t.style.display="block"
this.setfocus(t)
t.state="fullview" //indicate the state of the window as being "fullview"
},

hide:function(t){
t.style.display="none"
},

ajax_connect:function(url, t){
var page_request = false
var bustcacheparameter=""
if (window.XMLHttpRequest) // if Mozilla, IE7, Safari etc
page_request = new XMLHttpRequest()
else if (window.ActiveXObject){ // if IE6 or below
try {
page_request = new ActiveXObject("Msxml2.XMLHTTP")
}
catch (e){
try{
page_request = new ActiveXObject("Microsoft.XMLHTTP")
}
catch (e){}
}
}
else
return false
t.contentarea.innerHTML=this.ajaxloadinghtml
page_request.onreadystatechange=function(){dhtmlwindow.ajax_loadpage(page_request, t)}
if (this.ajaxbustcache) //if bust caching of external page
bustcacheparameter=(url.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime()
page_request.open('GET', url+bustcacheparameter, true)
page_request.send(null)
},

ajax_loadpage:function(page_request, t){
if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1)){
t.contentarea.innerHTML=page_request.responseText
}
},


stop:function(){
dhtmlwindow.etarget=null //clean up
document.onmousemove=null
document.onmouseup=null
},

addEvent:function(target, functionref, tasktype){ //assign a function to execute to an event handler (ie: onunload)
var tasktype=(window.addEventListener)? tasktype : "on"+tasktype
if (target.addEventListener)
target.addEventListener(tasktype, functionref, false)
else if (target.attachEvent)
target.attachEvent(tasktype, functionref)
},

cleanup:function(){
for (var i=0; i<dhtmlwindow.tobjects.length; i++){
dhtmlwindow.tobjects[i].handle._parent=dhtmlwindow.tobjects[i].resizearea._parent=dhtmlwindow.tobjects[i].controls._parent=null
}
window.onload=null
}

} //End dhtmlwindow object

document.write('<div id="dhtmlwindowholder"><span style="display:none">.</span></div>') //container that holds all dhtml window divs on page
window.onunload=dhtmlwindow.cleanup

timgolding
05-09-2009, 07:27 PM
It will work.

IFeelYourPain
05-09-2009, 07:32 PM
It will work.

Tried. It does the same thing. The PRE will work for the including, but when I open a popup with just the text file it will load all jumbled up and no separations. So where could I place pre in my script to make it work for the popup?

timgolding
05-09-2009, 07:41 PM
Then i would just use this



<html>
<body>

<?php
$str= file_get_contents("Text.txt");
$str = nl2br($str, true); // for XHMTL (in other words <br />). Use false for <br>. i.e $str = nl2br($str, false);
echo $str;
?>

</body>
</html>


Which doesn't require changing any of your text files

venegal
05-09-2009, 07:41 PM
Yeah I wouldn't go into that JS and monkey patch it to your needs. Better change your link to

<a href="#" onClick="ajaxwin=dhtmlwindow.open('ajaxbox', 'ajax', 'text2html.php?file=Textfile.txt', 'Ajax Win Title', 'width=650px,height=400px,left=300px,top=100px,resize=0,scrolling=1'); return false">Create/ Open Ajax Window</a>

and inside text2html.php you either wrap the text in <pre> tags or use timgolding's suggestion:


<pre>
<?php
if (isset($_GET['file']) && file_exists($_GET['file'])){
include($_GET['file']);
}
?>
</pre>

or


<?php
if (isset($_GET['file']) && file_exists($_GET['file'])){
$str= file_get_contents($_GET['file']);
$str = nl2br($str, true); // for XHMTL (in other words <br />). Use false for <br>. i.e $str = nl2br($str, false);
echo $str;
}
?>

IFeelYourPain
05-09-2009, 07:52 PM
Yeah I wouldn't go into that JS and monkey patch it to your needs. Better change your link to

<a href="#" onClick="ajaxwin=dhtmlwindow.open('ajaxbox', 'ajax', 'text2html.php?file=Textfile.txt', 'Ajax Win Title', 'width=650px,height=400px,left=300px,top=100px,resize=0,scrolling=1'); return false">Create/ Open Ajax Window</a>

and inside text2html.php you either wrap the text in <pre> tags or use timgolding's suggestion:


<pre>
<?php
if (isset($_GET['file']) && file_exists($_GET['file'])){
include($_GET['file']);
}
?>
</pre>

or


<?php
if (isset($_GET['file']) && file_exists($_GET['file'])){
$str= file_get_contents($_GET['file']);
$str = nl2br($str, true); // for XHMTL (in other words <br />). Use false for <br>. i.e $str = nl2br($str, false);
echo $str;
}
?>

The php file was for something else. The DHTML was also for something else. Thanks for helping with the php file I had that all done, but the php file is not going to be needed for the:

<a href="#" onClick="ajaxwin=dhtmlwindow.open('ajaxbox', 'ajax', 'Textfile.txt', 'Ajax Win Title', 'width=650px,height=400px,left=300px,top=100px,resize=0,scrolling=1'); return false">Create/ Open Ajax Window</a>

I actually wanted the script to open it in the popup and have it displayed correctly, but a simple css change to white-space: pre; got everything fixed up for me.

Thank you to everyone who has helped. You've helped a lot!

IFeelYourPain
05-09-2009, 11:37 PM
Another appracoh would be to use the php to replace new line characters with <br > Something like



<html>
<body>

<?php
$str= file_get_contents("Text.txt");
$str = nl2br($str, true); // for XHMTL (in other words <br />). Use false for <br>. i.e $str = nl2br($str, false);
echo $str;
?>

</body>
</html>

Warning: Wrong parameter count for nl2br() in /home/xxxxxxx/public_html/forum/codes/USA/A/include.php on line 6

timgolding
05-09-2009, 11:44 PM
Quoted form http://uk.php.net/manual/en/function.nl2br.php



5.3.0 Added the optional is_xhtml parameter.


Which tells me you are using an old version of php. Maybe php 4. so either upgrade to 5.3.0+ or use



$str = nl2br($str);


or make you own if its the wrong <br> or <br />




$str=preg_replace('/(\r\n|\n|\r)/','<br />$1', $str);


P.S The make your own code is untested but should work?

IFeelYourPain
05-10-2009, 12:29 AM
Quoted form http://uk.php.net/manual/en/function.nl2br.php



Which tells me you are using an old version of php. Maybe php 4. so either upgrade to 5.3.0+ or use



$str = nl2br($str);


or make you own if its the wrong <br> or <br />




$str=preg_replace('/(\r\n|\n|\r)/','<br />$1', $str);


P.S The make your own code is untested but should work?

I don't guess there is a way to just make the server always do this is there? Cause using the php to make it work sucks. I'd have to go back and basically copy everything.

timgolding
05-10-2009, 12:44 AM
What do you want the server to do exactly?

IFeelYourPain
05-10-2009, 01:49 AM
What do you want the server to do exactly?

Well here's the whole deal. I have about 200 text files and 200 links. I am using each link to popup a window with the text file loaded using this script:
http://www.dynamicdrive.com/dynamicindex8/dhtmlwindow/index.htm

However when it pops up it just does the stupid
ThisIsATest

Instead of
This
Is
A
Test

So if no one can edit the script is their a way to make the server always read the text file with separations. That way I can kill two birds with on stone (http://www.codingforums.com/showthread.php?p=814876&posted=1#post814876).

timgolding
05-10-2009, 02:09 AM
Ah i see your problem now.

Is your server a linux/unix server and do you have SSH access. If so i can give you a shell script to replace all those files in the hit of a button.

timgolding
05-10-2009, 02:53 AM
I just had a thought why don't you get your popup to load another php file. Then every popup can load that same file and pass the textfile to load through get



<a href="#" onClick="window.open('popup.php?file=Textfile.txt','Title', 'width=650px,height=400px,left=300px,top=100px,resize=0,scrolling=1');return false;">Create/ Open Window</a>


Then get the php file to use my code



<?php
if(isset($_GET["file"))
{
$file=$_GET["file"];
// Valiadate This needs to be serious validation to remove things like ../../somesecurefolder/somesecurefile
if(preg_match('#/|(?!\.txt)#', $file, $matches)) //something like that. Or maybe search the folder for a match
exit;
else
{
$str = file_get_contents('path_to_text_files/'.$file);
$str = nl2br($str);
echo $str;
}
}
?>


That sort of thing.

P.S I only removed your ajax thing because I don't know what it does? But if it works with that then keep it in. Because my code doesn't really pop up on IE7/8. Just opens a new tab

IFeelYourPain
05-10-2009, 03:48 AM
I just had a thought why don't you get your popup to load another php file. Then every popup can load that same file and pass the textfile to load through get



<a href="#" onClick="window.open('popup.php?file=Textfile.txt','Title', 'width=650px,height=400px,left=300px,top=100px,resize=0,scrolling=1');return false;">Create/ Open Window</a>


Then get the php file to use my code



<?php
if(isset($_GET["file"))
{
$file=$_GET["file"];
// Valiadate This needs to be serious validation to remove things like ../../somesecurefolder/somesecurefile
if(preg_match('#/|(?!\.txt)#', $file, $matches)) //something like that. Or maybe search the folder for a match
exit;
else
{
$str = file_get_contents('path_to_text_files/'.$file);
$str = nl2br($str);
echo $str;
}
}
?>


That sort of thing.

P.S I only removed your ajax thing because I don't know what it does? But if it works with that then keep it in. Because my code doesn't really pop up on IE7/8. Just opens a new tab

Yes this is looking like the thing I need! However I believe you made a small typo:
if(isset($_GET["file"))

Should be:
if(isset($_GET["file"]))

I did this and it doesn't display anything. Will it gather all the files from the directory? If not how can I get it to? My files are in /files however they are in alphabetical order. Like /files/A. Sorry I don't mean to make everything complicated on you, but when I started this project I figured I better be organized otherwise I may regret it.

venegal
05-10-2009, 11:46 AM
I just had a thought why don't you get your popup to load another php file. Then every popup can load that same file and pass the textfile to load through get

See my second post in this thread for the exact same thing.

The code will certainly not gather all your textfiles, it will simply show the one called "Textfile.txt", as specified in the link. If you want to generate links for all your text files, you can use something like:


$textFiles = array();
foreach(range('A', 'Z') as $letter){
if ($handle = opendir("files/".$letter."/")) {
while (false !== ($file = readdir($handle))) {
if ($file != '.' && $file != '..') $textFiles []= "files/".$letter."/".$file;
}
closedir($handle);
}
}

which puts all your filenames (including paths) into the array $textFiles, which you can use to validate against (although a simple preg_match will be faster), or to generate links to all the files, like


foreach($textFiles as $file){
echo "<a href='{$file}'>{$file}</a><br />";
}


(or different, if you're doing it with popups/php includes)

timgolding
05-10-2009, 02:18 PM
foreach($textFiles as $file){
echo "<a href='{$file}'>{$file}</a><br />";
}


(or different, if you're doing it with popups/php includes)

For popups


foreach($textFiles as $file){
echo "<a href=\"#\" onClick=\"window.open('popup.php?file=".$file."','Title', 'width=650px,height=400px,left=300px,top=100px,resize=0,scrolling=1');return false;\">Create/ Open Window</a>";
}


The code i posted previous has to be in a file called popup.php in the same folder as the file your running from. but wont work with venegals method so modify it like so.



<?php
if(isset($_GET["file"]))
{
$file=$_GET["file"];
// Valiadate This needs to be serious validation to remove things like ../../somesecurefolder/somesecurefile
if(!preg_match('#^/files/[A-Z]/(^/)\.txt$#', $file)) //something like that. Or maybe search the folder for a match
exit;
else
{
$str = file_get_contents($file);
$str = nl2br($str);
echo $str;
}
}
?>


In otherwords venegals code and my first code here are the code that go in the file that is displaying the links to the popups. And then that next code i posted will be in a file called popup.php

IFeelYourPain
05-10-2009, 04:02 PM
For popups


foreach($textFiles as $file){
echo "<a href=\"#\" onClick=\"window.open('popup.php?file=".$file."','Title', 'width=650px,height=400px,left=300px,top=100px,resize=0,scrolling=1');return false;\">Create/ Open Window</a>";
}


The code i posted previous has to be in a file called popup.php in the same folder as the file your running from. but wont work with venegals method so modify it like so.



<?php
if(isset($_GET["file"]))
{
$file=$_GET["file"];
// Valiadate This needs to be serious validation to remove things like ../../somesecurefolder/somesecurefile
if(!preg_match('#^/files/[A-Z]/(^/)\.txt$#', $file)) //something like that. Or maybe search the folder for a match
exit;
else
{
$str = file_get_contents($file);
$str = nl2br($str);
echo $str;
}
}
?>


In otherwords venegals code and my first code here are the code that go in the file that is displaying the links to the popups. And then that next code i posted will be in a file called popup.php

lol it seems I am really putting your coding skills to the max.

This is suppose to go in the page to display my popup correct?:

foreach($textFiles as $file){
echo "<a href=\"#\" onClick=\"window.open('popup.php?file=".$file."','Title', 'width=650px,height=400px,left=300px,top=100px,resize=0,scrolling=1');return false;\">Create/ Open Window</a>";
}


Problem with that is that VBulletin won't let you use php in their templates. So what was wrong with the regular popup.php?file=Filename.txt?

venegal
05-10-2009, 04:06 PM
What's wrong is that you don't have a text file with the file name "Filename.txt".

timgolding
05-10-2009, 05:59 PM
Nothings wrong with putting it in as html. But you wont be able to get all the popups that are in that folder. Without reverse engineering vbulletin.

IFeelYourPain
05-11-2009, 01:17 AM
Nothings wrong with putting it in as html. But you wont be able to get all the popups that are in that folder. Without reverse engineering vbulletin.
This won't display due to php:

foreach($textFiles as $file){
echo "<a href=\"#\" onClick=\"window.open('popup.php?file=".$file."','Title', 'width=650px,height=400px,left=300px,top=100px,resize=0,scrolling=1');return false;\">Create/ Open Window</a>";
}

This will:

<a href="#" onClick="window.open('popup.php?file=Textfile.txt','Title', 'width=650px,height=400px,left=300px,top=100px,resize=0,scrolling=1');return false;">Create/ Open Window</a>



What's wrong is that you don't have a text file with the file name "Filename.txt".

I'm not sure I follow? I do have a textfile named A.txt it's just in the /A directory because it has contents that has to do with my A category. However I changed the script accordingly.

timgolding
05-11-2009, 01:31 AM
I know

venegal
05-11-2009, 01:38 AM
I'm not sure I follow? I do have a textfile named A.txt it's just in the /A directory because it has contents that has to do with my A category. However I changed the script accordingly.

If you can't use a server side language to retrieve the actual names of the text files, you will have to hard code them in. What you can't do though is just call them "Textfile.txt" and hope they are magically replaced. If your file is called "A.txt", then that's what you have to put inside the link.

IFeelYourPain
05-12-2009, 08:23 PM
If you can't use a server side language to retrieve the actual names of the text files, you will have to hard code them in. What you can't do though is just call them "Textfile.txt" and hope they are magically replaced. If your file is called "A.txt", then that's what you have to put inside the link.

Confused. Which code should I try?

timgolding
05-12-2009, 09:46 PM
Hehe. I can't help feeling sorry for you that your still battling away with this.

This code you definitely need on its own in a file called popup.php that lives in the document root of the server



<?php
if(isset($_GET["file"]))
{
$file=$_GET["file"];
// Valiadate This needs to be serious validation to remove things like ../../somesecurefolder/somesecurefile
if(!preg_match('#^/files/[A-Z]/(^/)\.txt$#', $file)) //something like that. Or maybe search the folder for a match
exit;
else
{
$str = file_get_contents($file);
$str = nl2br($str);
echo $str;
}
}
?>


Then each time you want to make a link to the popup on a vbulletin page you can use.



<a href="#" onClick="window.open('popup.php?file=Textfile.txt','Title', 'width=650px,height=400px,left=300px,top=100px,resize=0,scrolling=1');return false;">Create/ Open Window</a>


And just replace the Textfile.txt with files/A/nameoffile.txt each time. or whatever it will be.

Also I just wanted to point out there are two ways you can include php in your vbullitine pages without reverse engineering. One is using ajax which would be hardish to do but the best way to do it. The other would be using iframes. But I never thought I'd ever be suggesting using iframes. They are horrible 1990's type things that should hardly ever be used. But both would only interest you if you need to automate the production of the popup links.

timgolding
05-12-2009, 09:48 PM
Oh and I'm happy to put this on my live server to prove that it works. Might be an idea as i haven't even tested it. Just say if you do want this?

IFeelYourPain
05-15-2009, 06:21 PM
Oh and I'm happy to put this on my live server to prove that it works. Might be an idea as i haven't even tested it. Just say if you do want this?

I'll test it out later today. Sorry for being such a hastle, but I don't care to battle this as long as I don't have to rewrite the thing.

So the link would look like this:
popup.php?file=files/A/Annoying.txt

Also: You seem to know what you are talking about, maybe you wanna help with this also:
http://www.codingforums.com/showthread.php?p=816044#post816044

P.S. Thanks for answering the other thread for me. I'll give it a shot after I test your code.



EZ Archive Ads Plugin for vBulletin Copyright 2006 Computer Help Forum